2016-12-06 3 views
2

Sorry im Voraus, wenn diese Frage schon einmal beantwortet wurde, aber ich kann es nicht finden.Handle doppelte Schlüssel in Python-Wörterbuch

Ich habe Panda Datenrahmen wie so:

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

ich es richtig laden und was will ich erreichen ist ein OrderedDict, die die doppelten Werte zusammenbrechen wird, wenn nötig. Für das obige Beispiel sollte

die Ausgabe-Wörterbuch sein:

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

Beachten Sie, dass die Werte des Wörterbuchs sind list und die Werte der Liste sind strings.

bisher Mein Code ist:

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) 

irgendwelche Ideen?

+0

laden die Sammlung mit dem Schlüssel, um die Werte anhängen. Genau so, wie Sie sagten. Schreiben Sie weiter, Sie sind auf dem richtigen Weg. – DejaVuSansMono

+0

Wenn der Schlüssel bereits im Wörterbuch vorhanden ist, sollten Sie die Liste mit '.extend()' an die vorhandene anhängen: 'od [k] .extend (unordered_dict.get (k))' – ozgur

+0

@dejavusansmono Ich bin stecken geblieben diesen Teil für über eine Stunde, deshalb habe ich es hier gepostet: P – Mixalis

Antwort

0

Ich denke, das ist, was Sie brauchen, zumindest auf meinem Dummy-Daten gearbeitet:

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]] 
Verwandte Themen