我有一个字典列表,希望按照另一个字典中的值进行排序。
此
[{'fld':'a1', 'sortkey':'k2'}, {'fld':'b1', 'sortkey':'k3'}, {'fld':'c1', 'sortkey':'k1'},{'fld':'d1', 'sortkey':'k3'}]
应使用以下
[{'sortkey':'k1', 'value':9}, {'sortkey':'k2', 'value':10}, {'sortkey':'k3', 'value':7}]
并获得以下结果
[ {'fld':'b1', 'sortkey':'k3'}, {'fld':'d1','sortkey':'k3'}, {'fld':'c1', 'sortkey':'k1'},{'fld':'a1', 'sortkey':'k2'} ]
答案 0 :(得分:3)
您需要将第二个列表转换为实际使用的内容,并具有任何不错的性能:
sort_map = {d['sortkey']: d['value'] for d in secondlist}
sorted(firstlist, key=lambda d: sort_map[d['sortkey']])
这假设对于sortkey
中的每个firstlist
值,第二个中都匹配sortkey
。
这给出了:
>>> firstlist = [{'fld':'a1', 'sortkey':'k2'}, {'fld':'b1', 'sortkey':'k3'}, {'fld':'c1', 'sortkey':'k1'},{'fld':'d1', 'sortkey':'k3'}]
>>> secondlist = [{'sortkey':'k1', 'value':9}, {'sortkey':'k2', 'value':10}, {'sortkey':'k3', 'value':7}]
>>> sort_map = {d['sortkey']: d['value'] for d in secondlist}
>>> sorted(firstlist, key=lambda d: sort_map[d['sortkey']])
[{'fld': 'b1', 'sortkey': 'k3'}, {'fld': 'd1', 'sortkey': 'k3'}, {'fld': 'c1', 'sortkey': 'k1'}, {'fld': 'a1', 'sortkey': 'k2'}]
答案 1 :(得分:2)
为您当前的名单提供一些名称:
data = [{'fld':'a1', 'sortkey':'k2'}, {'fld':'b1', 'sortkey':'k3'}, {'fld':'c1', 'sortkey':'k1'},{'fld':'d1', 'sortkey':'k3'}]
sorts = [{'sortkey':'k1', 'value':9}, {'sortkey':'k2', 'value':10}, {'sortkey':'k3', 'value':7}]
首先,我会将sorts
转换为以下内容:
{'k1': 9, 'k2': 10, 'k3': 7}
您可以使用以下代码执行此操作:
sorts_dict = {d['sortkey']: d['value'] for d in sorts}
然后你可以用这个来获得你的最终名单:
result = sorted(data, key=lambda d: sorts_dict.get(d['sortkey']))