重新组织字典键,值对的更好方法是什么?

时间:2012-11-14 02:24:57

标签: python dictionary

我从一个简单的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”。)

3 个答案:

答案 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())

然后根据您的喜好打包datesobservations列表。

您可以使用相同的构造进行排序:

dates, observations = zip(*sorted(date_dict.items()))

答案 2 :(得分:0)

你确定需要字典吗?我认为元组列表能够做得更好:

observations = [('2003-08-13',1),...]