Python中的有序字典

时间:2014-03-14 00:10:52

标签: python dictionary

我在Python中有一个字典,如下所示: dict = {'a':1,'q':1,'l':2,'m':1,'你':1,'我':1}

有什么方法可以保持这种字典的顺序以这种方式表达。我已经阅读了几个论坛,其中大多数建议使用OrderedDict()。但正如这里所解释的那样:

Python OrderedDict not keeping element order

OrderedDict(dict)在以该形式编写字典时不会保留顺序。我无法以特定方式手动创建字典(例如元组列表),因为它是由其他地方的代码随机生成的。 非常感谢你的帮助!!

3 个答案:

答案 0 :(得分:3)

你写dict = {'a':1, 'q':1, 'l':2, 'm':1, 'u':1, 'i':1}的那一刻,你已经失去了元素的顺序。保持它的方法:

一个。首先从您的数据中创建OrderedDict

湾将您的dict转换为元组列表并按照您想要的方式排序,然后从中创建OrderedDict

总而言之,根据您的问题,您不清楚自己想要保留什么。如果它是“随机”生成然后谁在乎,如果它背后有一些逻辑,那么使用这个逻辑重新创建该命令并使用它创建OrderedDict。如果在幕后发生了某些事情,从某些输入数据创建了这个字典,那么,唉,你看到它的顺序不是它的创建顺序。

PS并且不要打电话给你的词典dict

答案 1 :(得分: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)

答案 2 :(得分: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])