2016-11-16 3 views
0

Ich habe Hinzufügen einer Liste von Tupeln wie:Werte oder das Hinzufügen neuer Tupel in Python

tuplist = [('New York', 546), ('Chicago', 675)] 

Und neue Tupel in die Liste oder die Summe entweder hinzufügen, nach dem [0] Index:

tup3 = ('New York', 655) 
tup4 = ('Los Angeles', 1273) 

Um:

[('New York', 1201), ('Chicago', 675), ('Los Angeles', 1273)] 

ich diese Listen als wachsende Werte in einem dict als ich Schleife durch eine CSV bin zu schaffen. Wenn also die oben {'Apples': [(City1, Number1), (City2, Number2)]} darstellt, ich derzeit verwenden:

if fruit not in city_fruitd: 
    city_fruitd[fruit] = [(city, count)] 
else: 
    city_fruitd[fruit] += [(city, count)] 

Wie prüfe ich stattdessen für bestehende Städte und dementsprechend summieren, wenn die Stadt bereits vorhanden ist?

+2

warum nicht anstelle eines Tupels einen Zähler dic verwenden und Sie können die neuen Werte viel hinzufügen einfacher –

+4

Muss das wirklich "eine Liste von Tupeln" sein? Dein Job wäre einfacher, wenn das ein Wörterbuch wäre, wie zum Beispiel '{'New York': 546, 'Chicago': 675}'. –

+0

Aber es ist ein Wörterbuch. Oder meinst du, ich sollte ein Wörterbuch von Wörterbüchern anstelle eines Wörterbuchs von Tupel-Listen haben? Ich bin verwirrt beim Erstellen von {'Apples': {City1: Number1, City2: Number2}}. Tatsächlich erstelle ich später im Code ein Wörterbuch aus den Tupeln, aber nur so, dass ich eines nach dem anderen verdauen kann. – Xodarap777

Antwort

1

Sie wollen für den Fall prüfen, wo die Stadt in der Liste der Städte ist:

city in [x[0] for x in city_fruitd[fruit]] 

Dann ist diese Stadt Index

index = [city_fruitd[fruit].index(x) for x in city_fruitd[fruit] if city == x[0]][0] 

finden und den Mehrwert zuweisen

city_fruitd[fruit][index] = [(city, city_fruitd[fruit][index][1] + count)] 

So:

Hier
1

ist ein Ansatz mit defaultdict wie in den Kommentaren diskutiert:

from collections import defaultdict 

#Initialize the defualt dict 
tupdict = defaultdict(int) 

#Add existing tuple list to default dict 
tuplist = [('New York', 546), ('Chicago', 675)] 
tupdict.update(tuplist) 

#Add tuples one at a time to tupdict 
tup3 = ('New York', 655) 
tup4 = ('Los Angeles', 1273) 

#Simple function to make it easier to add tuples 
def add_tup(tupdict, to_add): 
    k,v = to_add 
    tupdict[k] += v 

add_tup(tupdict, tup3) 
add_tup(tupdict, tup4) 

#Convert dict back to tuples 
tuplist = tupdict.items() 
print(tuplist) 

Ausgang:

[('New York', 1201), ('Los Angeles', 1273), ('Chicago', 675)] 
Verwandte Themen