2

我正在尝试反转一个简单的字典,例如:

{'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4}

我正在使用这个功能:

def invert(d):
    return dict([(x,y) for y,x in d.iteritems()])

现在,当我翻转字典时,一切正常。但是,当我将其反转两次时,我得到:

{'a': 1, 'c': 3, 'b': 2, 'd': 4}

这与我开始使用的字典的顺序不同。我的反转功能有问题吗?抱歉,我对python有点陌生,但感谢您的帮助!

4

3 回答 3

3

没错,字典在python中是无序的

另一个所以回答答案:

CPython 实现细节:键和值以非随机的任意顺序列出,因 Python 实现而异,并且取决于字典的插入和删除历史。

来自文档

最好将字典视为一组无序的键:值对,并要求键是唯一的(在一个字典中)。一对大括号创建一个空字典:{}。在大括号内放置一个逗号分隔的键:值对列表,将初始键:值对添加到字典中;这也是在输出上编写字典的方式。

于 2012-12-26T17:41:50.587 回答
2

Python 字典没有按设计排序。

collections.OrderedDict如果你真的需要这种行为,你可以改用。

于 2012-12-26T17:42:38.140 回答
2

尝试运行此代码:

d = {
    'a' : 1, 'b' : 2, 
    'c' : 3, 'd' : 4
}

def invert(d):
    return dict([(x,y) for y,x in d.iteritems()])

print d

d = invert(d)

print d

d = invert(d)

print d

这是输出:

{'a':1,'c':3,'b':2,'d':4}
{1:'a',2:'b',3:'c',4:'d'}
{'a':1,'c':3,'b':2,'d':4}

如您所见,从技术上讲,它同一个字典,但是当您声明它时,它是无序的。

于 2012-12-26T17:45:16.073 回答