【发布时间】:2026-02-19 05:10:01
【问题描述】:
我有一本这样的字典:
d = {'a':[{'a1':1},{'a2':5},{'a3':4}], 'b':[{'b1':0},{'b2':1},{'b3':2}], 'c':[{'c1':1},{'c2':2}]}
我想按每个 list 中的值总和(字典中每个项目的值)对其进行排序,以便得到:
r = [('a', (10, [{'a1':1},{'a2':5},{'a3':4}])),
('b', (3, [{'b1':0},{'b2':1},{'b3':2}])),# 'b' and 'c' have sum of '3', so they tied here
('c', (3, [{'c1':1},{'c2':2}]))]
我可以用一种天真的方法来完成这项工作。我想知道如何以更 Pythonic 的方式完成此任务。我已经尝试过了,但由于明显的原因没有工作:
sorted(sum(d.values()), key=d.get, reverse=True)
提前感谢您的回答!
【问题讨论】:
-
您的示例结果不是有效的语法,因为括号不匹配。固定括号会给出一个包含一个元素(字典)的列表,这是毫无意义的。请再试一次您想要的输出。此外,除非您使用正确版本的 Python,否则字典没有顺序的概念,因此无法排序。
-
d中的内部字典是否总是只有一个键/值?如果是这样,将它们配对(元组)或将字典列表设为一个字典会更有意义。 -
@AlexHall,感谢您指出括号不匹配以及字典中没有固有顺序这一事实。 :) 在我的问题中修复了它们。
标签: python dictionary list-comprehension