Python中的有序字典
我在Python中有一个字典,长这样:
dict = {'a':1, 'q':1, 'l':2, 'm':1, 'u':1, 'i':1}
我想知道有没有办法保持这个字典的顺序。之前我看过很多论坛,大部分都建议使用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
。