我可以确定Python字典中的顺序吗?
函数op.GetTangent(id)
返回包含与'vl'
和'vr'
相关联的两个值的字典。我想以懒惰的方式解开它。
vr, vl = op.GetTangent(id).values()
我可以确定vr
和vl
具有正确的值,还是可以存在交换的情况?
答案 0 :(得分:6)
不,您永远不应该依赖values
方法返回的条目的顺序。您有几个简单的选择:
sorted
(如果值可以排序)sorted
并提取值collections.OrderedDict
答案 1 :(得分:6)
vr, vl = map(op.GetTangent(id).get, ('vr', 'vl'))
答案 2 :(得分:3)
不,永远不会。
取而代之的是
getbyname = lambda d, *kk: [d[k] for k in kk]
并将其用作
vr, vl = getbyname(op.GetTangent(id), 'vr', 'vl')
或只是做
d = op.GetTangent(id)
vr, vl = [d[i] for i in ('vr', 'vl')]
如果您只需要一次。
答案 3 :(得分:1)
只是为了完全避免任何疑问,我系统上的实际输出:
C:\Python32>python -c "print({'vr':1, 'vl':2})"
{'vr': 1, 'vl': 2}
C:\Python32>python -c "print({'vr':1, 'vl':2})"
{'vl': 2, 'vr': 1}
运行Python 3.2.3,PYTHONHASHSEED设置为'random',不同的相同代码运行在字典中有不同的项目顺序。