Ice*_*ele 3 python sorting dictionary list
我有一个像这样结构的字典列表.
[
{
'id': 1,
'last_message': {
'sent_at': '2015-10-15T17:48:52.515Z',
'...' : '...'
},
'...' : '...',
},
{
'id': 2,
'last_message': {
'sent_at': '2015-10-15T17:45:52.515Z',
'...' : '...'
},
'...' : '...',
},
{
'id': 3,
'last_message': {
'sent_at': '2015-10-15T17:43:52.515Z',
'...' : '...'
},
'...' : '...',
}
]
Run Code Online (Sandbox Code Playgroud)
并希望按列表排序['last_message']['sent_at'].
我尝试像这样进行插入排序,但这导致无限循环.
ret = []
for conversation in conversations:
if len(ret) > 1:
for conv in ret:
if conversation['last_message']['sent_at'] > conv['last_message']['sent_at']:
ret.insert(ret.index(conv), conversation)
continue
else:
ret.append(conversation)
Run Code Online (Sandbox Code Playgroud)
我能做些什么来实现这个目标?
您可以简单地使用sorted()带key参数的方法对字典列表进行排序.
另外,我建议实际上将字符串转换为datetimeobject,然后再将其传递给key参数datetime.datetime.strptime().
示例 -
import datetime
result = sorted(conversations, key=lambda x: datetime.datetime.strptime(x['last_message']['sent_at'],'%Y-%m-%dT%H:%M:%S.%fZ'))
Run Code Online (Sandbox Code Playgroud)
演示 -
>>> conversations = [
... {
... 'id': 1,
... 'last_message': {
... 'sent_at': '2015-10-15T17:48:52.515Z',
... '...' : '...'
... },
... '...' : '...',
... },
... {
... 'id': 2,
... 'last_message': {
... 'sent_at': '2015-10-15T17:45:52.515Z',
... '...' : '...'
... },
... '...' : '...',
... },
... {
... 'id': 3,
... 'last_message': {
... 'sent_at': '2015-10-15T17:43:52.515Z',
... '...' : '...'
... },
... '...' : '...',
... }
... ]
>>>
>>> import datetime
>>> result = sorted(conversations, key=lambda x: datetime.datetime.strptime(x['last_message']['sent_at'],'%Y-%m-%dT%H:%M:%S.%fZ'))
>>> pprint.pprint(result)
[{'...': '...',
'id': 3,
'last_message': {'...': '...', 'sent_at': '2015-10-15T17:43:52.515Z'}},
{'...': '...',
'id': 2,
'last_message': {'...': '...', 'sent_at': '2015-10-15T17:45:52.515Z'}},
{'...': '...',
'id': 1,
'last_message': {'...': '...', 'sent_at': '2015-10-15T17:48:52.515Z'}}]
Run Code Online (Sandbox Code Playgroud)