3

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

该函数op.GetTangent(id)返回一个字典,其中包含与'vl'和关联的两个值'vr'。我想以懒惰的方式打开它。

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

我可以确定vrvl具有正确的价值吗?或者是否存在交换它们的情况?

4

4 回答 4

6

不,您永远不应该依赖该values方法返回的条目的顺序。您有几个简单的选择:

  • 调用sorted结果列表(如果可以对值进行排序)
  • 调用sorted项目并提取值
  • 用一个collections.OrderedDict
于 2012-07-05T07:26:17.277 回答
6
vr, vl = map(op.GetTangent(id).get, ('vr', 'vl'))
于 2012-07-05T07:39:48.270 回答
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')]

如果你只需要一次。

于 2012-07-05T07:28:41.500 回答
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 设置为“随机”,并且相同代码的不同运行在字典中具有不同的项目顺序。

于 2012-07-05T08:19:18.633 回答