Сортировка списка словарей по одному из значений

301 просмотра
0
0 Комментариев

Как я могу отсортировать список словарей по одному полю словаря, например, по дате ?
К примеру, у меня есть список словарей словарей с такими ключами:

'uid', 'inn', 'soft', 'sender',
'receiver', 'filename', 'package', 'send_date'

Как мне отсортировать его по send_date ?


Добавить комментарий

2 Answers

Python Опубликовано 18.12.2018
0

В функции сортировки нужно использовать выражение вида key=lambda x: x['filename'].

Пример со всеми полями создавать лень, сделал укороченную версию:

items = [
  {'filename': '999.txt', 'package': 1},
  {'filename': '123.txt', 'package': 5},
  {'filename': '654.txt', 'package': 3},
  ]
 
print(sorted(items, key=lambda x: x['package']))

Результат:

[{'package': 1, 'filename': '999.txt'}, {'package': 3, 'filename': '654.txt'}, {'package': 5, 'filename': '123.txt'}]

Добавить комментарий
0

Модуль Pandas очень удобен для работы с такими структурами (и не только для этого)…

Предположим у вас есть следующий список словарей:

d = [
 {'filename': 'c:\\temp\\file111.txt', 'send_date': datetime.datetime(2016, 11, 25, 12, 12, 12)},
 {'filename': 'file001.txt', 'send_date': datetime.datetime(2016,1,1,11,11,11)},
 {'filename': 'file003.txt', 'send_date': datetime.datetime(2001,12,31,23,59,59)},
 {'filename': 'file099.txt', 'send_date': datetime.datetime(2016,10,10,10,10,10)}
]

создаем из него DataFrame:

import datetime
import pandas as pd
 
df = pd.DataFrame(d)
print(df)

Оригинальный DF:

In [25]: print(df)
              filename           send_date
0  c:\temp\file111.txt 2016-11-25 12:12:12
1          file001.txt 2016-01-01 11:11:11
2          file003.txt 2001-12-31 23:59:59
3          file099.txt 2016-10-10 10:10:10

Отсортированный по дате DF:

In [26]: print(df.sort_values('send_date'))
              filename           send_date
2          file003.txt 2001-12-31 23:59:59
1          file001.txt 2016-01-01 11:11:11
3          file099.txt 2016-10-10 10:10:10
0  c:\temp\file111.txt 2016-11-25 12:12:12

Отсортированный по дате (в обратном порядке) DF:

In [27]: print(df.sort_values('send_date', ascending=False))
              filename           send_date
0  c:\temp\file111.txt 2016-11-25 12:12:12
3          file099.txt 2016-10-10 10:10:10
1          file001.txt 2016-01-01 11:11:11
2          file003.txt 2001-12-31 23:59:59

Отсортированный по дате DF в виде списка словарей:

In [28]: df.sort_values('send_date').to_dict('r')
Out[28]:
[{'filename': 'file003.txt', 'send_date': Timestamp('2001-12-31 23:59:59')},
 {'filename': 'file001.txt', 'send_date': Timestamp('2016-01-01 11:11:11')},
 {'filename': 'file099.txt', 'send_date': Timestamp('2016-10-10 10:10:10')},
 {'filename': 'c:\\temp\\file111.txt',
  'send_date': Timestamp('2016-11-25 12:12:12')}]

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up