【发布时间】:2012-02-09 21:29:06
【问题描述】:
我正在尝试通过执行以下操作从 dicts 列表中获取所有值(对应于特定键的值除外):
fv = [[v for (k,v) in d.iteritems() if k is not 'xKey'] for d in someDict]
someDict 是这样的:
[{xKey:0.1,yKey:0.2,zKey:0.3},{yKey:0.9,xKey:0.7,zKey:0.4}...]
我知道 dict 没有固有的顺序。但是我的列表 fv 需要按顺序排列这些值。我正在考虑对键上的字典进行排序,然后做我刚刚做的事情。但这能保证有效吗?
我知道使用 OrderedDict 是一种选择,但与 dict 相比,它的性能似乎也较差,这对我来说是一个问题,因为我的字典通常会包含大量数据。
更新:当我说我需要按顺序排列值时,它们实际上并不需要排序。我的意思是我需要能够每次都以固定的确定顺序检索值列表。在上面例如,我总是想得到 [[0.2,0.3],[0.9,0.4]] 虽然它本身可能不是排序顺序。排序将强制执行一个确定性的顺序。我真正关心的是保持值在最终列表中的位置。例如yKey 的值必须始终是每个列表中的第一个值,zKey 的值必须始终是每个列表中的第二个值,依此类推,即使 ykey、zkey 等在字典中的顺序可能是任意的。
【问题讨论】:
-
我会使用
OrderedDict,然后测量速度,看看性能是否有问题。如果没有相关领域的丰富经验,通常很难预测性能。 -
我同意,尽管字典会随着时间的推移而变大,我知道我们可能不应该修复它,如果它没有损坏,但我不想一周后重温。
-
"一个固定的确定性顺序......它本身可能不是一个排序的顺序" 你不能有一个未指定但确定性的顺序。这只是要求下一个版本的问题具有不同的未指定的确定性顺序。请做出一个有限的、明确的、有效的陈述。希望的功能不会很好地发挥作用。
-
你到底想通过从字典中获取这些数据来完成什么?这似乎是一个奇怪的要求......
-
@KarlKnechtel:好点。例如,如果要点是两个有两个“并行”字典,那么让一个字典为每个键有两个值会更聪明。
标签: python dictionary ordereddictionary