在Python中遍历二维数组并将项添加到字典中有困难。

3

这个程序需要使用两个循环遍历数组,并将第一个集合中不是数字的所有内容作为键。但字典中添加的键的顺序与我的预期不符。这个类还有更多的代码,但下面是让我困扰的部分。

class Sorter(): 
def __init__(self, vals): 
    self.vals = vals

def borda(self): 
    bordaContainer = { }
    arrayLength = len(self.vals) 
    for outsides in range(arrayLength):
        for insides in range(len(self.vals[outsides])):
            currentChoice = self.vals[outsides][insides]
            if outsides ==0 and insides != len(self.vals[outsides])-1:
                bordaContainer[currentChoice] = ''
    return bordaContainer

inputArray = [['A','B','C','D',10],['C','D','B','A',4],['D','A','B','C',7]]
first = Sorter(inputArray)
print first.borda()

结果如下:
{'A': '', 'C': '', 'B': '', 'D': ''} 

我应该得到 {'A': '', 'B': '', 'C': '', 'D': ''}。能否解释一下发生了什么,谢谢!


Python中的字典是无序的。如果需要有序字典,请使用collections模块中的OrderedDict - tzaman
Python中的字典不会保留插入键的顺序。如果您想要保持顺序,请尝试使用OrderedDict。https://docs.python.org/2/library/collections.html#collections.OrderedDict - ashwinjv
这个问题的本质已经在 Stack Overflow 上被问了无数次。如果你想要一个关于为什么 Python 字典是无序的技术解释,这里有一些很好的答案。链接 - John Y
2个回答

4

1
在Python中,字典包含可哈希对象作为键,您不能期望其顺序。如果尝试下面的代码,您会看到这一点。
>>> d = {'a': 1, 'b': 2, 'c':3}
>>> d
{'a': 1, 'c': 3, 'b': 2}

你可以在collections中使用OrderedDict,如下所示...
>>> from collections import OrderedDict
>>> d1 = OrderedDict([('a', 1), ('c', 3), ('b', 2)])
>>> d1
OrderedDict([('a', 1), ('c', 3), ('b', 2)])
>>> for i in d1:
...     print i, d1[i]
... 
a 1
c 3
b 2

抱歉,我对字典不太熟悉,以为自己有逻辑错误。无论如何,感谢大家的回复! - user3163789

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接