我有一个以下形式的列表字典:
dict1 = { key1 : ['a', 'b'], key2: ['c', 'd'], key3: ['e']}
我有另一本形式的字典
dict2 = { a: 10, b: 11, c: 6, d: 15, e: 3}
我想根据 dict 2 的值以相反的顺序对 dict1 进行排序,因此结果将类似于:
sorted_dict = { key2:['d', 'c'], key1: ['b', 'a'], key3:['e']}
编辑:我需要保留键的顺序。我也可以将其转换为元组,这是完全可以接受的。
谢谢!
答案 0 :(得分:1)
您可以在 key
中使用 sorted
参数:
sorted_dict = {}
for k in dict1:
sorted_dict[k] = sorted(dict1[k], key=lambda v: dict2[v], reverse=True)
这给出:
{'key1': ['b', 'a'], 'key2': ['d', 'c'], 'key3': ['e']}
答案 1 :(得分:1)
要对字典值进行排序,您可以执行以下操作:
sorted_dict = {
key: sorted(value, key=lambda x: dict2.get(x, 0), reverse=True)
for key, value in dict1.items()
}
然后对字典进行排序(更改键的顺序),您可以这样做:
sorted_dict = dict(
sorted(
sorted_dict.items(),
key=lambda x: sum(dict2.get(i, 0) for i in x[1]),
reverse=True,
)
)
关于 dictionary 中键顺序的旁注。
<块引用>字典保留插入顺序。请注意,更新密钥确实 不影响订单。删除后添加的键插入 结束。
3.7 版更改:字典顺序保证插入 命令。此行为是 CPython 3.6 的实现细节。
答案 2 :(得分:0)
您不能对字典进行排序,但可以对列表进行排序。我建议采用与我在下面所做的类似的方法,在映射来自 dict2 的值之后对键进行排序,然后从排序的键创建一个新的 unordered
字典。
dict1 = { "key1" : ['a', 'b'], "key2": ['c', 'd'], "key3": ['e']}
dict2 = { "a": 10, "b": 11, "c": 6, "d": 15, "e": 3}
sorted_keys = sorted([key for key in dict1], key=lambda x: sum([dict2[el] for el in dict1[x]]), reverse=True)
sorted_dict = {k: dict1[k] for k in sorted_keys}
这会产生
{'key1': ['b', 'a'], 'key2': ['d', 'c'], 'key3': ['e']}
按映射值排序