2012-11-14 35 views
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鍵和由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」。在數據重新組織之後,第三個索引在「日期時間」名單的是「2003年8月24日」,它正確地對應於「觀察名單」爲「5」的第3個指標)

回答

5

可能:

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

如果您需要請嘗試使用OrderedDict代替字典:

返回一個字典子類的實例,支持通常的字典 方法。 OrderedDict是一個字典,可以記住首先插入密鑰 的訂單。如果新條目覆蓋現有條目,則原始插入位置保持不變。刪除條目並重新插入它將使其移動到最後。

+0

第一件事,我試過了。這不保留數據順序和關係。 –

+0

O,它確實匹配... –

+0

@CalvinCheng - 你是什麼意思的數據順序和關係? 'zip(d.keys(),d.values())'在功能上等同於'd.items()' – mgilson

0

你確定你需要一本詞典嗎?我認爲一個元組列表你想要做什麼更好的:

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

我不需要字典。我只需要將數據集重新組織爲該格式。 –

1

如何:

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

然後收拾datesobservations名單,只要你喜歡。

您可以用相同的結構進行排序:

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

好的一個關於'郵編'。 –

相關問題