我可以确定字典中的顺序吗?

时间:2012-07-05 07:23:08

标签: python dictionary iterable-unpacking

我可以确定Python字典中的顺序吗?

函数op.GetTangent(id)返回包含与'vl''vr'相关联的两个值的字典。我想以懒惰的方式解开它。

vr, vl = op.GetTangent(id).values()

我可以确定vrvl具有正确的值,还是可以存在交换的情况?

4 个答案:

答案 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',不同的相同代码运行在字典中有不同的项目顺序。