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

时间:2014-08-27 15:12:57

标签: python python-2.7 dictionary

我有一个按键值未排序的defaultdict:

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

按键排序列表:

tmp = sorted(d.keys())

创建新词典:

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

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

3 个答案:

答案 0 :(得分:3)

dict个实例是任意排序的。如果您需要特定订单,请改用collections.OrderedDict

答案 1 :(得分:1)

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所暗示的那样:

OrderedDict(sorted(d.iteritems()))

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

答案 2 :(得分:0)

python词典无法正常工作。字典实际上是一个哈希映射,这意味着值根据键哈希放在dict中的一个位置,而不是你放置项目的顺序,在迭代时,你不会得到&#34;命令dict&#34;。请改用OrderedDict类