Python中的有序字典

4 投票
3 回答
3039 浏览
提问于 2025-04-17 22:14

我在Python中有一个字典,长这样:

dict = {'a':1, 'q':1, 'l':2, 'm':1, 'u':1, 'i':1}

我想知道有没有办法保持这个字典的顺序。之前我看过很多论坛,大部分都建议使用OrderedDict()。但是在这里解释的情况是:

Python的OrderedDict没有保持元素顺序

使用OrderedDict(dict)时,字典的顺序不会保持,因为字典是以这种形式写的。我不能手动以特定的方式创建字典(比如用元组列表),因为这个字典是由其他代码随机生成的。

非常感谢你的帮助!!

3 个回答

0

只需要用两个for循环:

dict = {'a':4, 'q':1, 'l':2, 'm':4, 'p':1}

i = max(dict.values())+1
for el in range (i):
    for letter in dict:
        if el==dict[letter]:
            print(letter,dict[letter])
1

如果你想要排序的字典是别人创建的,你可能需要用下面的方法把它的 键:值 对提取成一个元组的列表:

pairs = my_dict.items()

然后你可以随意对这个列表进行排序。排序完成后,你可以把这个排好序的键值对列表传给 OrderedDict 的构造函数。

from collections import OrderedDict
# sort in some way (for example, reverse the key order)
pairs = reversed(my_dict.items())
ordered = OrderedDict(pairs)
3

当你写下 dict = {'a':1, 'q':1, 'l':2, 'm':1, 'u':1, 'i':1} 的时候,你就已经失去了元素的顺序。想要保持顺序的方法有:

a. 从一开始就用 OrderedDict 来创建你的数据。

b. 把你的 dict 转换成一个元组的列表,然后按照你想要的方式排序,再用这个列表创建 OrderedDict

总的来说,从你的问题来看,不太清楚你想要保持什么顺序。如果这个顺序是“随机生成”的,那就没关系;如果背后有一些逻辑,那么就用这个逻辑来重新创建那个顺序,并用它来生成 OrderedDict。如果有一些事情在幕后发生,导致这个字典是从某些输入数据生成的,那么,很遗憾,你看到的顺序并不是它被创建时的顺序。

附言:别把你的字典命名为 dict

撰写回答