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的精确副本。尽管我按新的顺序添加了元素。
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的
python字典不能这样工作。字典实际上是一个散列映射,这意味着值将根据键散列而不是放置项的顺序放在dict中的一个点上,并且在迭代时,将不会得到"有序dict"。改用ordereddict类