1

我从一个简单的 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它维护了key持有的list和key持有的list之间的数据关系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”。数据重组后,'datetime 的第 3 个索引' 列表是“2003-08-24”,它正确对应于“观察列表”的第三个索引为“5”。)

4

3 回答 3

5

也许:

new_dict = {'datetime': date_dict.keys(), 'observations': date_dict.values()}

如果您需要订单,请尝试使用OrderedDict而不是 dict:

返回一个 dict 子类的实例,支持常用的 dict 方法。OrderedDict 是一个 dict,它记住第一次插入键的顺序。如果新条目覆盖现有条目,则原始插入位置保持不变。删除条目并重新插入会将其移至末尾。

于 2012-11-14T02:31:58.737 回答
1

怎么样:

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

然后随心所欲地打包datesobservations列表。

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

dates, observations = zip(*sorted(date_dict.items()))
于 2012-11-14T02:43:43.827 回答
0

你确定你需要一本字典吗?我认为元组列表可以更好地满足您的需求:

observations = [('2003-08-13',1),...]
于 2012-11-14T02:36:57.457 回答