从列表理解创建有序的字典?

时间:2015-03-19 02:31:31

标签: python python-2.7 dictionary

Here is a list comprehension

L = [{k: d[k](v) for (k, v) in l.iteritems()} for l in L]

其中

  • L是有序词典的列表(即collections.OrderedDict的对象),其中词典具有相同的键集。

  • d是另一个有序字典,它与前面排序的字典具有相同的密钥集。

  • 对于每个keyd[key]是一个可以应用于L[i][key]的函数,即d[key](L[i][key])

所有给定的词典都是有序的词典,并且在键中具有相同的顺序。

但是代码会创建一个无序字典。如何以与给定的有序词典相同的键顺序创建有序的dict?

2 个答案:

答案 0 :(得分:9)

collections.OrderedDict只是一个字典,它记住元素包含在其中的顺序。所以你可以用它的构造函数创建一个

[OrderedDict((k, d[k](v)) for (k, v) in l.iteritems()) for l in L]

答案 1 :(得分:4)

与C ++字典不同的Python字典是无序的,因为它使用哈希作为其键。另一种方法是使用名为collections.OrdredDict的python字典的有序特化。

这会将您的声明变为

from collections import OrderedDict
L = [OrderedDict((k, d[k](v)) for (k, v) in l.iteritems()) for l in L]