我正在尝试反转一个简单的字典,如:
{'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有点新手,但感谢您的帮助!
答案 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}
正如您所看到的,技术上是相同的字典,但是当您声明它时,它是无序的。