1

我得到了一个字典列表,并希望按另一个字典中的值对其进行排序。

这个

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

2 回答 2

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'}]
于 2013-02-14T17:45:23.570 回答
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']))
于 2013-02-14T17:45:14.193 回答