Python:用有序的字符串编写空字典
请注意,我正在尝试不寻找像这样的默认有序字典。类似的东西 如果我从“收款”模块调用OrderedICT,我可以执行以下操作-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
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它不维护键的顺序,因为您正在通过普通字典传递它们。