我从一个简单的python字典开始: -
In [29]: date_dict
Out[29]:
{'2003-06-24': 2,
'2003-08-13': 1,
'2003-08-19': 2,
'2003-08-22': 1,
'2003-08-24': 5}
键是日期,值是整数。
我的目标是将此词典中的数据重组为: -
{'datetime': ['2003-08-13',
'2003-08-19',
'2003-06-24',
'2003-08-24',
'2003-08-22'],
'observations': [1, 2, 2, 5, 1]}
维护datetime
密钥保存的列表与observations
密钥保存的列表之间的数据关系。
这是我完成这项工作的解决方案: -
In [35]: new_dict
Out[35]: {'datetime': [], 'observations': []}
In [36]: for key, value in date_dict.iteritems():
....: new_dict['datetime'].append(key)
....: new_dict['observations'].append(value)
In [37]: new_dict
Out[37]:
{'datetime': ['2003-08-13',
'2003-08-19',
'2003-06-24',
'2003-08-24',
'2003-08-22'],
'observations': [1, 2, 2, 5, 1]}
我的问题是 - 有没有替代方案(更好的,如果更有效率)这样做的方法?
(注意,保持两个列表之间的数据关系至关重要,即在原始的date_dict中,“2003-08-24”对应于值“5”。重组数据后,第3个索引'datetime'列表是“2003-08-24”,它正确地将“观察列表”的第3个索引对应为“5”。)
答案 0 :(得分:5)
也许:
new_dict = {'datetime': date_dict.keys(), 'observations': date_dict.values()}
如果您需要订购,请尝试使用OrderedDict代替dict:
返回一个dict子类的实例,支持通常的dict 方法。 OrderedDict是一个记住键的顺序的dict 最先插入。如果新条目覆盖现有条目,则 原始插入位置保持不变。删除条目和 重新插入它将把它移到最后。
答案 1 :(得分:1)
怎么样:
dates, observations = zip(*date_dict.items())
然后根据您的喜好打包dates
和observations
列表。
您可以使用相同的构造进行排序:
dates, observations = zip(*sorted(date_dict.items()))
答案 2 :(得分:0)
observations = [('2003-08-13',1),...]