Python将defaultdict复制到具有新键顺序的dict

Python copying defaultdict to dict with new order of key

我有一个未按键值排序的默认dict:

1
2
3
d = defaultdict(int)
...
defaultdict(<type 'int'>, {'2014-06-30': 2, '2013-04-18': 7, '2013-04-19': 9})

排序键列表:

1
tmp = sorted(d.keys())

并创建新的dict:

1
2
3
nd = {}
for i in tmp:
    nd[i] = d[i]

但结果我得到了源dict的精确副本。尽管我按新的顺序添加了元素。


dict实例是任意排序的。如果您想要一个特定的订单,那么使用collections.OrderedDict代替。


1
2
3
4
5
6
7
from collections import OrderedDict  
ord_dict = OrderedDict()

for i in tmp:
    ord_dict[i] = d[i]
print(ord_dict)
OrderedDict([('2013-04-18', 7), ('2013-04-19', 9), ('2014-06-30', 2)])

或者正如@jon clements简单建议的那样:

1
OrderedDict(sorted(d.iteritems()))

或使用python 3的OrderedDict(sorted(d.items()))


python字典不能这样工作。字典实际上是一个散列映射,这意味着值将根据键散列而不是放置项的顺序放在dict中的一个点上,并且在迭代时,将不会得到"有序dict"。改用ordereddict类