对di的python列表中的值进行排序

2024-04-20 06:42:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我想根据\d+:\d+格式的键对字典列表进行排序

字典列表应具有预期的键(age)

lst = [
[{'id': 'SOMEDATA_31_30', 'age': '31:30', 'values':0, 'hasdata': False, 'name': u'SOMEDATA'}]
[{'id': 'SOMEDATA1_32_29', 'age': '32:29', 'values':1, 'hasdata': False, 'name': u'SOMEDATA1'}]
[{'id': 'SOMEDATA2_22_20', 'age': '22:20', 'values':3, 'hasdata': False, 'name': u'SOMEDATA2'},{'id': 'SOMEDATA2_28_27', 'age': '28:27', 'values':4, 'hasdata': False, 'name': u'SOMEDATA2'}]
]

所以当我传递整个(lst)来比较(函数?!)然后,它应该给我一个目录,按年龄顺序排列。你知道吗

lst = [
    {'id': 'SOMEDATA1_32_29', 'age': '32:29', 'values':1, 'hasdata': False, 'name': u'SOMEDATA1'}
    {'id': 'SOMEDATA_31_30', 'age': '31:30', 'values':0, 'hasdata': False, 'name': u'SOMEDATA'}
    {'id': 'SOMEDATA2_28_27', 'age': '28:27', 'values':4, 'hasdata': False, 'name': u'SOMEDATA2'}
    {'id': 'SOMEDATA2_22_20', 'age': '22:20', 'values':3, 'hasdata': False, 'name': u'SOMEDATA2'}
    ]

我们应该怎么做?谢谢你的时间。你知道吗


Tags: 函数nameidfalse列表age字典排序
3条回答

使用NumPy可以尝试以下方法:

ages = [i['age'] for i in lst]
print (np.array(lst)[np.argsort(ages)[::-1]])

输出

[ {'id': 'SOMEDATA1_32_29', 'age': '32:29', 'values': 1, 'hasdata': False, 'name': 'SOMEDATA1'}
 {'id': 'SOMEDATA_31_30', 'age': '31:30', 'values': 0, 'hasdata': False, 'name': 'SOMEDATA'}
 {'id': 'SOMEDATA2_28_27', 'age': '28:27', 'values': 4, 'hasdata': False, 'name': 'SOMEDATA2'}
 {'id': 'SOMEDATA2_22_20', 'age': '22:20', 'values': 3, 'hasdata': False, 'name': 'SOMEDATA2'}]

您可以使用sorted()。你知道吗

lst = [
{'id': 'SOMEDATA_31_30', 'age': '31:30', 'values':0, 'hasdata': False, 'name': u'SOMEDATA'},
{'id': 'SOMEDATA1_32_29', 'age': '32:29', 'values':1, 'hasdata': False, 'name': u'SOMEDATA1'},
{'id': 'SOMEDATA2_22_20', 'age': '22:20', 'values':3, 'hasdata': False, 'name': u'SOMEDATA2'},
{'id': 'SOMEDATA2_28_27', 'age': '28:27', 'values':4, 'hasdata': False, 'name': u'SOMEDATA2'},
]

newlist = sorted([x[0] for x in lst], key=lambda k: k['age'], reverse=True)

print(newlist)

输出

[{'age': '32:29', 'hasdata': False, 'id': 'SOMEDATA1_32_29','name': 'SOMEDATA1', 'values': 1},
 {'age': '31:30','hasdata': False, 'id': 'SOMEDATA_31_30','name': 'SOMEDATA', 'values': 0},
 {'age': '28:27', 'hasdata': False, 'id': 'SOMEDATA2_28_27','name':'SOMEDATA2','values': 4},
 {'age': '22:20', 'hasdata': False, 'id': 'SOMEDATA2_22_20','name': 'SOMEDATA2','values': 3}]

使用python内置函数keyreverse参数sorted()

lst = [
{'id': 'SOMEDATA_31_30', 'age': '31:30', 'values':0, 'hasdata': False, 'name': u'SOMEDATA'},
{'id': 'SOMEDATA1_32_29', 'age': '32:29', 'values':1, 'hasdata': False, 'name': u'SOMEDATA1'},
{'id': 'SOMEDATA2_22_20', 'age': '22:20', 'values':3, 'hasdata': False, 'name': u'SOMEDATA2'},
{'id': 'SOMEDATA2_28_27', 'age': '28:27', 'values':4, 'hasdata': False, 'name': u'SOMEDATA2'},
]

import re
from pprint import pprint


pprint( sorted(lst, reverse=True, key=lambda v: [(int(i[0]), int(i[1])) for i in re.findall(r'(\d+):(\d+)', v['age'])]), width=120 )

这张照片:

[{'age': '32:29', 'hasdata': False, 'id': 'SOMEDATA1_32_29', 'name': 'SOMEDATA1', 'values': 1},
 {'age': '31:30', 'hasdata': False, 'id': 'SOMEDATA_31_30', 'name': 'SOMEDATA', 'values': 0},
 {'age': '28:27', 'hasdata': False, 'id': 'SOMEDATA2_28_27', 'name': 'SOMEDATA2', 'values': 4},
 {'age': '22:20', 'hasdata': False, 'id': 'SOMEDATA2_22_20', 'name': 'SOMEDATA2', 'values': 3}]

相关问题 更多 >