在反转字典两次时没有得到相同的结果

时间:2012-12-26 17:40:46

标签: python dictionary

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

{'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有点新手,但感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

这是正确的,字典在python

中是无序的

来自another so answer回答:

  

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

来自docs

  

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

答案 1 :(得分:2)

Python字典在设计上没有排序。

如果您确实需要此行为,则可以使用collections.OrderedDict

答案 2 :(得分: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}

正如您所看到的,技术上相同的字典,但是当您声明它时,它是无序的。