2014-02-15 59 views
0

我试图使用键值对的字典来存储和访问基于适当的键列表。以下是我正在使用的。Python 2.7字典与键值对列表重新排序

newDict = {'mod':[0,2], 'pro':[2,3], 'st':[6,10]} 
newDict2 = {'a':[0,2], 'b':[2,3], 'c':[6,10]} 

我建立这个字典在一个特定的顺序,所以我可以用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 

我更关心键的顺序而不是列表的值。所以我不想按照列表的值排序。我一直在做研究,但不知道为什么它会改变顺序。我试着改变列表中的值来尝试找出它,但我一直无法找到一个模式。我认为在命令不是问题时使用了字典。也许点滴不是这样的。任何帮助是极大的赞赏。

+2

除了在您的情况下命令*是一个问题。 –

+0

有一个orderedDict这样的事情。我相信你想要使用那个 – bnjmn

回答

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 
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])]) 
+3

有一些保证,但它们非常小 - 例如你可以保证,只要你不插入或删除任何项目,多次遍历它,字典的顺序将始终保持一致。 – mgilson