使用另一个词典列表中的值对字典列表进行排序

时间:2013-02-14 17:39:06

标签: python

我有一个字典列表,希望按照另一个字典中的值进行排序。

[{'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'} ]

2 个答案:

答案 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']))