Python中对字典进行排序并返回键的列表

56

我有一个像 A = {'Name1':34, 'Name2': 12, 'Name6': 46,....} 这样的字典。

我该如何获取按值排序后的键列表,即 [Name2, Name1, Name6....]


谢谢你的建议@Felix,但在提问之前我已经搜索过了,答案并不是我需要的。 - Alejandro
3
我不同意,有许多类似的问题已经有了你正在寻找的答案。例如,我链接的问题中第二个最高票答案提供的解决方案与这里最高票答案相同,或者例如这些答案。你可能需要尝试一些方法,但问题肯定已经存在了。 - Felix Kling
答案不是我需要的。这是一个无用的陈述。现有答案缺少什么?它们如何不完整或误导?你的问题有什么独特之处?请具体说明。 - S.Lott
规范的如何按值对字典进行排序?考虑了一个问题,其中期望输出既有键又有值(并且答案解释了字典本质上是无序的,因此在Python版本中不可排序)。然而,这个问题只要求获取键;除了“对项目进行排序(大型规范)然后从排序结果中提取键”之外,还有其他方法来解决这个问题。因此,我将其重新关闭为一个较少人知道但质量更好、更具体的问题的重复。 - Karl Knechtel
4个回答

74

使用sorted函数,以get方法作为排序依据(通过迭代访问字典的键):

sorted(A, key=A.get)

7
使用 sortedkey 参数。
sorted(d, key=d.get)

5

sorted(a.keys(), key=a.get)

这个函数会对字典的键进行排序,对于每个键,使用a.get获取相应的值并将其作为排序依据。


注意不需要使用 a.keys,它会创建一个键列表。a (或 a.iterkeys())已经是字典 a 键的可迭代对象了。 - Mike Graham
1
是的,我知道这是不必要的,但我认为它读起来更好。我把字典看作是一对一对的容器,而不是键的容器。 - Ned Batchelder

3
我会使用:

items = dict.items()
items.sort(key=lambda item: (item[1], item[0]))
sorted_keys = [ item[0] for item in items ]
key参数是sort函数中的一个可调用对象,用于返回所需排序的键。在本例中,我返回了一个元组(value, key),但如果您愿意,也可以只返回值(即key=lambda item: item[1])。请注意保留HTML标签。

1
另一种解决方案对我来说更简单易读。 - Mike Graham
如果你遇到了linter的问题,可以使用sorted函数:items = sorted(dict.items(), key=lambda item: (item[1], item[0])) - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接