Python中的有序字典

4
我有一个Python字典,如下所示: dict = {'a':1, 'q':1, 'l':2, 'm':1, 'u':1, 'i':1}
是否有任何方法可以保持这个字典的顺序?我已经阅读了几个论坛,并且大多数建议使用OrderedDict()。但是正如在这里所解释的那样:Python OrderedDict not keeping element order 当以那种形式编写字典时,OrderedDict(dict)将无法保持顺序。我无法手动以特定方式创建字典(例如元组列表),因为它是由其他地方的代码随机生成的。
非常感谢您的帮助!

如果你的字典是由“其他地方的代码随机生成”的,那么你想保留什么顺序呢?在“其他地方的代码”中已经失去了任何排序概念。换句话说,“保持这个字典的顺序”没有意义——字典是无序的 - isedev
2
不要用类型名称来命名变量,比如不要把它叫做“dict”。 - metatoaster
3个回答

3
当你写下dict = {'a':1, 'q':1, 'l':2, 'm':1, 'u':1, 'i':1}时,你已经失去了元素的顺序。保持顺序的方法如下:
a. 一开始就从数据中创建OrderedDict
b. 将你的dict转换为元组列表并按照需要排序,然后从中创建OrderedDict
总之,从你的问题中并不清楚你想要保留什么。如果它是“随机”生成的,那就无所谓;如果有某种逻辑在其中,那就使用这个逻辑来重新创建那个顺序,并使用它来创建OrderedDict。如果有一些幕后事件导致这个字典从某些输入数据中创建出来,那么,遗憾的是,你看到的顺序不是它被创建的顺序。
PS:不要把你的字典叫做dict

1
注意:从 Python 3.7 开始,字典是有序的,详见此答案 https://dev59.com/6VkS5IYBdhLWcg3wXFg9#39980744。 - HHest

1
如果你想订购的字典是在你无法控制的情况下创建的,你可以使用以下代码将其 key:value 对作为元组列表获取:
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)

0

只需使用2即可:

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])

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