2016-12-06 51 views
2

對不起,如果這個問題已經回答過,但我似乎無法找到它。在Python字典中處理重複密鑰

我有熊貓據幀像這樣:

id | value1 | value2 | ... | valueN 
1 | 321 | 44  | ... | 7766 
2 | 5678 | 7638 | ... | 987423 
2 | 0971 | 7638 | ... | 1 
and so on... 

我正確地加載它,我想要實現的是一個OrderedDict如果需要的話,這將崩潰的雙重價值。對於上面的例子,

輸出詞典應該是:

{1: ['321', '44', ..., '7766'], 2:['5678,0971', '7638', ..., '987423,1']} 

注意,字典的值是list和列表的值是strings

到目前爲止我的代碼是:

od = collections.OrderedDict() 
for k in df.id: 
     if k in od: 
      # This key, pre-exists in this dictionary, so we have to append values 
      # what should I do here? 
     else: 
      # new value inserted. proceed. 
      od[k] = unordered_dict.get(k) 

什麼想法?

+0

負載集合配鑰匙,附加變量的值。就像你說的。繼續寫作,你走在正確的軌道上。 – DejaVuSansMono

+0

如果密鑰已存在於字典中,您應該使用'.extend()':'od [k] .extend(unordered_dict.get(k))將列表添加到現有的列表中。' – ozgur

+0

@dejavusansmono我被困在這部分超過一個小時,這就是爲什麼我把它發佈在這裏:P – Mixalis

回答

0

我覺得這是你所需要的,至少它的工作對我的虛擬數據:

all_data = {}     
for column in df.columns.values[1:]: 
    data = df.groupby('id').apply(lambda x: ','.join(x[column])).to_dict() 
    for key in data: 
     if key in all_data.keys(): 
      all_data[key].append(data[key]) 
     else: 
      all_data[key] = [data[key]]