如何按键对字典进行排序?

1489

如何根据字典的键进行排序?

示例输入:

{2:3, 1:89, 4:5, 3:0}

期望的输出:

{1:89, 2:3, 3:0, 4:5}

6
我的使用场景是我有一个CLI应用程序,它有一个简单的菜单,菜单选项作为字典键存在。我想按字母顺序显示这些键,以使用户更加方便使用。 - Randy
2
“字典未排序” - 并非普遍真实。例如,Java拥有TreeMap(https://docs.oracle.com/javase/8/docs/api/java/util/TreeMap.html),它的行为完全符合OP的要求。 - Nayuki
14
请注意,字典现在按照插入顺序排序(Python 3.6+)。以下部分答案指出了这一点。 - matiasg
4
请注意,在Python 3.6中,保持插入顺序的字典是CPython的一个实现细节。直到Python 3.7,字典的插入顺序保持才正式成为语言的一部分。 - robertspierre
排序后的字典 = dict(sorted(my_dict.items())) - undefined
33个回答

0
如果你知道所有的键都是相同类型或者拥有支持“<”(小于,Python的__lt__)的类型,那么你可以使用以下易于理解的一行代码:dict(sorted(your_dict.items(), key=lambda _: _[0]))。这行代码将对字典进行排序并转换为字典格式。

0

我的建议是这样的,因为它允许您对字典进行排序或在添加项目时保持字典排序,并且可能需要在将来添加项目:

从头开始构建一个dict。有第二个数据结构,即列表,其中包含您的键列表。bisect包具有insort函数,允许将其插入到已排序的列表中,或者在完全填充字典后对列表进行排序。现在,当您遍历字典时,您可以遍历列表以按顺序访问每个键,而不必担心字典结构的表示(该结构不适用于排序)。


0
从Python 3.7开始,对字典进行排序变得更加容易。
要根据字典的键进行排序,只需执行以下操作:
dict(sorted(my_dict.items(), key=lambda x: x[0]))

要根据字典的值进行排序,只需执行以下操作
dict(sorted(my_dict.items(), key=lambda x: x[1]))

上述两个命令都将返回一个字典。

是的,没错,但是人们已经提出了这个解决方案。 - undefined
真的吗?这里有太多答案了,而且没有一个是简明扼要的。也许我迷失了方向。 - undefined

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