这个问题在这里已有答案:
我有两个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]]]
解决这个问题最有效的方法是什么?
是啊。使用sorted()并传递一个“key”函数,该函数知道如何获取要排序的值。就像是:
sorted(dict1.items(), key=lambda kv: dict2[kv[0]])
请注意,我将其保留为元组列表。如果你想要一个真正的字典,你必须使用OrderedDict。
你可以试试这个:
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]]]
请注意,您的结果不再是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]]]