2017-07-21 1 views
0

Hallo Ich versuche, die eindeutigen Werte in einem Wörterbuch zu erhalten. Ich habe einen Arbeitscode, aber ich wollte sehen, ob es eine sauberere Lösung gab.Einmalige Werte im Wörterbuch erhalten Python

"test.csv" sieht wie folgt aus:

Test1,1,BALL 
Test1,2,APPLE 
Test1,3,APPLE 
Test,4,APPLE 
Test,6,BALL 

Und das Skript sieht wie folgt aus:

name_dist=dict() 
with open('test.csv','r')as f: 
    spamreader=csv.reader(f,delimiter=",") 
    next(f) 
    for row in spamreader: 
     if row[2].strip() in name_dist: 
      name_dist[row[2].strip()].append(row[0].strip()) 
     else: 
      name_dist[row[2].strip()]=[row[0].strip()] 
finaldict={} 
for key,value in name_dist.iteritems(): 
    finaldict[key]=set(value) 

ich die Ausgabe sein wollen: {'APPLE': {'Test', 'Test1'}, 'BALL': {'Test'}}

Bitte lassen Sie mich wissen wenn es einen besseren Weg gibt, das gleiche Ergebnis zu erzielen.

Antwort

0

sehr neue Lösung

from collections import defaultdict 
name_dist=defaultdict(set) 
with open('test.csv','r')as f: 
    spamreader=csv.reader(f,delimiter=",") 
    next(f) 
    for row in spamreader: 
     name_dist[row[2].strip()].add(row[0].strip()) 
print dict(name_dist) #convert it back to a normal dictionary 

mit freundlicher Genehmigung von diesem Beitrag Python: list() as default value for dictionary

+0

Ich würde ein leeres Wörterbuch mit diesem Code. – Sam

+0

Entschuldigung, ich habe vergessen, es einem Wörterbuch zuzuweisen haha ​​Ich habe den Code bearbeitet – Hamuel

+0

Ich bekomme Attribut Fehler: 'NoneType' Objekt hat kein Attribut 'hinzufügen'. – Sam

Verwandte Themen