Python:用一个有序的字符串写一个空字典

时间:2014-08-09 05:09:04

标签: python python-2.7 dictionary

请注意我正在尝试不寻找像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]

但似乎我错过了一些东西。有什么提示吗?

4 个答案:

答案 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)))