我正在根据\ d +:\ d +
格式的关键字对字典列表进行排序字典列表应具有预期的密钥(年龄)
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)传递给compare(function ?!)时,它应该给我一个基于年龄按降序排列的字典列表。
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'}
]
我们应该怎么做?谢谢你的时间。
答案 0 :(得分:1)
使用python内置函数key
的{{1}}和reverse
参数:
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 )
答案 1 :(得分:1)
您可以使用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}]
答案 2 :(得分:0)
使用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'}]