请注意我正在尝试不寻找像question这样的默认有序词典。相似的东西。
如果我从集合模块调用OrderedDict,我可以这样做 -
from collections import OrderedDict
my_ordered_dict = OrderedDict()
然后我可以设置像这样调用setitem函数的项目,我假设魔法发生了 -
my_ordered_dict[key1] = value1
my_ordered_dict[key2] = value2
my_ordered_dict[key3] = value3
获得完美的OrderedDict -
>my_ordered_dict
{key1:value1, key2:value2, key3:value3...}
然而,当我尝试像这样初始化我的键值配对时:
my_ordered_dict = {key1 : value1,
key2 : value2,
key3 : value3...}
字典失去了秩序。
我可以通过初始化元组列表来解决这个问题:
default = [ (key1, value1), (key2, value2), (key3, value3)]
for pair in default:
my_ordered_dict[pair[0]] = pair[1]
但似乎我错过了一些东西。有什么提示吗?
答案 0 :(得分:3)
这有效:
my_ordered_dict = OrderedDict(( (key1, value1), (key2, value2), (key3, value3) ))
以上是有效的,因为我们使用的参数是元组,并且元组是有序的。
再次因为订购了一个元组,这也可以工作:
my_ordered_dict = OrderedDict()
my_ordered_dict.update(( (key1, value1), (key2, value2), (key3, value3) ))
相比之下,这将不工作:
my_ordered_dict = OrderedDict({key1:value1, key2:value2,})
上面OrderedDict
的参数是一个无序字典。所有订单在创建时都已丢失。
有趣的是,顺序可以在无序字典上重新显示,因为这些例子来自documention for the collections module显示:
>>> # dictionary sorted by key
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])
>>> # dictionary sorted by value
>>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])
>>> # dictionary sorted by length of the key string
>>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])
答案 1 :(得分:2)
每当你写:
{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
它将被评估为普通字典并立即失去其顺序。在您的示例中,您使用普通字典覆盖my_ordered_dict
。
相反,您可以使用元组列表:
OrderedDict([('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3')])
答案 2 :(得分:1)
您需要像这样初始化OrderedDict以创建OrderedDict:
>>> dct = OrderedDict(((key1, value1), (key2, value2), (key3, value3)))
>>> type(dct)
<class 'collections.OrderedDict'>
也就是说,这样创建的dict会生成一个普通的dict,而不是一个OrderedDict:
>>> dct = {key1: value1, key2 : value2, key3 : value3}
>>> type(dct)
<type 'dict'>
查看某些good OrderedDict examples的python文档。
答案 3 :(得分:0)
如果您使用:
my_ordered_dict = {key1 : value1,
key2 : value2,
key3 : value3...}
这是一个普通的(未排序的)词典,你需要这样做:
my_ordered_dict = OrderedDict(((key1, value1), (key2, value2), (key3, value3)))