基于另一个字典排序字典[重复]

问题描述 投票:-1回答:3

这个问题在这里已有答案:

我有两个Python词典 -

dict1 = {'a' : [1, 2, 3], 'b' : [4, 5, 6], 'c' : [7, 8, 9]}
dict2 = {'a' : 30, 'b' : 75, 'c' : 15}

我想根据dict1的值对dict2进行排序。最终答案应该是这样的 -

[['c', [7, 8, 9]], ['a', [1, 2, 3]], ['b', [4, 5, 6]]]

解决这个问题最有效的方法是什么?

python python-3.x sorting dictionary
3个回答
3
投票

是啊。使用sorted()并传递一个“key”函数,该函数知道如何获取要排序的值。就像是:

sorted(dict1.items(), key=lambda kv: dict2[kv[0]])

请注意,我将其保留为元组列表。如果你想要一个真正的字典,你必须使用OrderedDict。


1
投票

你可以试试这个:

dict1 = {'a' : [1, 2, 3], 'b' : [4, 5, 6], 'c' : [7, 8, 9]}
dict2 = {'a' : 30, 'b' : 75, 'c' : 15}
new_data = list(map(list, sorted(dict1.items(), key=lambda x:dict2[x[0]])))

输出:

[['c', [7, 8, 9]], ['a', [1, 2, 3]], ['b', [4, 5, 6]]]

1
投票

请注意,您的结果不再是dict,而是列表列表,如果要对其进行排序,则更好,因为dicts中的顺序无法保证/实现细节

我会根据另一个字典中键的值对项进行排序,并将items产生的元组转换为2元素list

dict1 = {'a' : [1, 2, 3], 'b' : [4, 5, 6], 'c' : [7, 8, 9]}
dict2 = {'a' : 30, 'b' : 75, 'c' : 15}

print([list(x) for x in sorted(dict1.items(),key = lambda x : dict2[x[0]])])

结果:

[['c', [7, 8, 9]], ['a', [1, 2, 3]], ['b', [4, 5, 6]]]
© www.soinside.com 2019 - 2024. All rights reserved.