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

Python:用有序的字符串编写空字典,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,请注意,我正在尝试不寻找像这样的默认有序字典。类似的东西 如果我从“收款”模块调用OrderedICT,我可以执行以下操作- from collections import OrderedDict my_ordered_dict = OrderedDict() 然后我可以像这样设置调用setitem函数的项,我假设神奇发生了- my_ordered_dict[key1] = value1 my_ordered_dict[key2] = value2 my_ordered_dict[k

请注意,我正在尝试不寻找像这样的默认有序字典。类似的东西

如果我从“收款”模块调用OrderedICT,我可以执行以下操作-

 from collections import OrderedDict
 my_ordered_dict = OrderedDict()
然后我可以像这样设置调用setitem函数的项,我假设神奇发生了-

 my_ordered_dict[key1] = value1
 my_ordered_dict[key2] = value2
 my_ordered_dict[key3] = value3
并得到一个完美有序的信息-

>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]
OrderedDict([('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3')])

但我好像错过了什么。有什么提示吗?

您需要像这样初始化OrderedICT以创建OrderedICT:

>>> dct = OrderedDict(((key1, value1), (key2, value2), (key3, value3)))
>>> type(dct)
<class 'collections.OrderedDict'>
>>> dct = {key1: value1, key2 : value2, key3 : value3}
>>> type(dct)
<type 'dict'>
dct=OrderedDict(((键1,值1),(键2,值2),(键3,值3))) >>>类型(dct) 也就是说,这样创建的dict生成的是正常的dict,而不是有序的dict:

>>> dct = OrderedDict(((key1, value1), (key2, value2), (key3, value3)))
>>> type(dct)
<class 'collections.OrderedDict'>
>>> dct = {key1: value1, key2 : value2, key3 : value3}
>>> type(dct)
<type 'dict'>
dct={key1:value1,key2:value2,key3:value3} >>>类型(dct) 查看python文档中的一些内容。

这可以:

my_ordered_dict = OrderedDict(( (key1, value1), (key2, value2), (key3, value3) ))
上述方法之所以有效,是因为我们使用的参数是tuple,并且tuple是有序的

同样,由于元组是有序的,这也会起作用:

my_ordered_dict = OrderedDict()
my_ordered_dict.update(( (key1, value1), (key2, value2), (key3, value3) ))
相比之下,这是行不通的:

上面的
OrderedDict
的参数是一个无序字典。创建订单时,所有订单均已丢失

不过,有趣的是,顺序可以在无序字典上重新导入,如以下示例所示:

如果您使用:

my_ordered_dict = {key1 : value1,
                   key2 : value2,
                   key3 : value3...}
这是一个普通的(未排序的)命令,您需要执行以下操作:

my_ordered_dict = OrderedDict(((key1, value1), (key2, value2), (key3, value3)))
无论何时你写:

{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
它将作为普通词典进行评估,并立即失去其顺序。在您的示例中,您正在使用普通词典覆盖
my\u ordered\u dict

相反,您可以使用元组列表:

default = [ (key1, value1), (key2, value2), (key3, value3)]

for pair in default:
   my_ordered_dict[pair[0]] = pair[1]
OrderedDict([('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3')])

@levi它不维护键的顺序,因为您正在通过普通字典传递它们。