我正在尝试使用键值对的dict来存储和访问基于相应键的列表。以下是我正在使用的内容。
newDict = {'mod':[0,2], 'pro':[2,3], 'st':[6,10]}
newDict2 = {'a':[0,2], 'b':[2,3], 'c':[6,10]}
我正在按特定顺序构建此dict,因此我可以使用for
循环遍历它。但无论出于何种原因,当我打印或通过for
循环时,键的顺序都会被重新排序。
print "the newDict is: " + str(newDict)
print "the newDict2 is: " + str(newDict2)
for key in newDict:
print "the key is: " + str(key)
此输出如下。
newDict is: {'pro': [2, 3], 'mod': [0, 2], 'st': [6, 10]}
newDict2 is: {'a': [0, 2], 'c': [6, 10], 'b': [2, 3]}
the key is: pro
the key is: mod
the key is: st
我更关心的是键的顺序而不是列表的值。所以我不想按列表的值排序。我一直在做研究,但无法弄清楚为什么它会改变秩序。我已经尝试更改列表中的值以尝试找出它但我无法找到模式。我认为dict是在订单不是问题时使用的。也许dicts不是解决这个问题的方法。非常感谢任何帮助。
答案 0 :(得分:2)
正如您所提到的,python词典不保持秩序。这意味着在打印dict
或在创建或修改后对其进行迭代时,无法保证以任何顺序输出键值对。但是,只要没有插入或删除任何项目,该订单就会被维护。
dict
中的列表(与键对应的值)不会改变;它们仍然与分配给它们的键相匹配。但是,键值对的顺序已更改。
如果您希望键值对保持顺序,则可以使用OrderedDict
。
from collections import OrderedDict
newDict = OrderedDict([('mod', [0,2]), ('pro',[2,3]), ('st',[6,10])])
newDict2 = OrderedDict([('a',[0,2]), ('b',[2,3]), ('c',[6,10])])
答案 1 :(得分:1)
对于我遇到网络问题的滞后感到抱歉
from collections import OrderedDict
这是一个特殊的容器,它是一个OrderedDict,它按键插入顺序排序,键将按顺序维护它们的顺序。
所以你有一些创建密钥的过程,
newDict = OrderedDict()
for some_iterator_value in some_iterator:
key = some_iterator_value
value = we_created_a_list
newDict[key] = value