2016-12-06 103 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]]