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

Python 使用另一个字典列表中的值对字典列表进行排序,python,Python,我得到了一个字典列表,并希望它按另一个字典中的值排序 这个 应使用以下命令 [{'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':'

我得到了一个字典列表,并希望它按另一个字典中的值排序

这个

应使用以下命令

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

为当前列表提供一些名称:

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}]
首先,我将
排序
转换为以下内容:

{'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']))

为当前列表提供一些名称:

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}]
首先,我将
排序
转换为以下内容:

{'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']))

您需要将第二个列表转换为您可以实际使用的任何性能:

sort_map = {d['sortkey']: d['value'] for d in secondlist}

sorted(firstlist, key=lambda d: sort_map[d['sortkey']])
这假定对于
firstlist
中的每个
sortkey
值,第二个列表中都有一个匹配的
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'}]

您需要将第二个列表转换为您可以实际使用的任何性能:

sort_map = {d['sortkey']: d['value'] for d in secondlist}

sorted(firstlist, key=lambda d: sort_map[d['sortkey']])
这假定对于
firstlist
中的每个
sortkey
值,第二个列表中都有一个匹配的
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'}]

对不起,您能更明确地说明第一个列表是如何使用第二个列表进行排序的吗?是不是
list[i]['sortkey']
匹配到第二个列表中恰好具有相同
sortkey
值的dict,然后根据第二个字典中的
值进行排序?@Fenikso-早些时候,我试图将排序值添加到第一个列表中,按排序值排序,然后从列表中删除排序值。@Martijn Pieters-是的,您的假设是正确的。对不起,您能更明确地说明如何使用第二个列表对第一个列表进行排序吗?是不是
list[i]['sortkey']
匹配到第二个列表中恰好具有相同
sortkey
值的dict,然后根据第二个字典中的
值进行排序?@Fenikso-早些时候,我试图将排序值添加到第一个列表中,按排序值排序,然后从列表中删除排序值。@Martijn Pieters-是的,你的假设是正确的。太好了,这就是我要找的。谢谢。太好了,这就是我要找的。谢谢