отсортированные списки словаря с указанием c данных в dict - PullRequest
0 голосов
/ 06 января 2020

У меня есть списки словаря ниже:

data = [
{'name' : 'doan',
 'policies': [{'policy_start': '2019-05-01'},
          {'policy_start': '2019-05-02'}]},
{'name' : 'bui',
 'policies': [{'policy_start': '2019-05-03'},
              {'policy_start': '2019-05-04'}]},
{'name' : 'xuan',
 'policies': []}
]

как можно sorted использовать их сначала policy_start с результатом:

[{'name': 'bui', 'policies': [{'policy_start': '2019-05-03'}, {'policy_start': '2019-05-04'}]}, 
{'name': 'doan', 'policies': [{'policy_start': '2019-05-01'}, {'policy_start': '2019-05-02'}]},
{'name' : 'xuan','policies': []}]

Я пробовал с функцией:

sorted(data, key=lambda item: item['policies'][0]['policy_start'], reverse=True)

но это только работа с данными:

data = [
{'name' : 'doan',
 'policies': [{'policy_start': '2019-05-01'},
              {'policy_start': '2019-05-02'}]},
{'name' : 'bui',
 'policies': [{'policy_start': '2019-05-03'},
              {'policy_start': '2019-05-04'}]}]

Ответы [ 2 ]

3 голосов
/ 06 января 2020

Попробуйте,

sorted(data, key=lambda item: item['policies'][0]['policy_start'] if item['policies'] else '', reverse=True)

1 голос
/ 06 января 2020

Попробуйте:

from datetime import datetime
from datetime import  timedelta

some_old_date = (datetime.now() - timedelta(days=1000)).date()
key = lambda item: datetime.strptime(item['policies'][0]['policy_start'], '%Y-%m-%d').date()\
 if item['policies'] else some_old_date
sorted(data, key=key, reverse=True)

Вывод:

[{'name': 'bui',
  'policies': [{'policy_start': '2019-05-03'},
   {'policy_start': '2019-05-04'}]},
 {'name': 'doan',
  'policies': [{'policy_start': '2019-05-01'},
   {'policy_start': '2019-05-02'}]},
 {'name': 'xuan', 'policies': []}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...