2016-11-16 3 views
0

У меня есть список кортежей, таких как:Добавление значений или добавление новых кортежей в Python

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

И новых кортежей либо добавить к списку или суммы, в соответствии с [0] индекс:

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

Чтобы получить:

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

Я создаю эти списки, как рост значения в Словаре в I цикле через CSV. Таким образом, если выше, представляет {'Apples': [(City1, Number1), (City2, Number2)]}, я в настоящее время используют:

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

Как вместо проверки существующих городов и суммируют соответственно, если город уже существует?

+2

почему не вместо кортежа использовать счетчик DIC, и вы можете добавить новые значения много проще –

+4

Должно быть, это действительно «список кортежей»? Ваша работа была бы проще, если бы это был словарь, например '{'New York': 546, 'Chicago': 675}'. –

+0

Но это словарь. Или вы имеете в виду, что у меня должен быть словарь словарей вместо словаря списков кортежей? Я запутался в создании {'Яблоки': {City1: Number1, City2: Number2}}. На самом деле, позже в коде я делаю словарь из кортежей, но только так, чтобы я мог переваривать один за раз. – Xodarap777

ответ

1

Вы хотите проверить для случая, когда город находится в списке городов:

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

Тогда найти этот город индексировать

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

и назначьте его добавленную стоимость

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

So:

if fruit not in city_fruitd: 
    city_fruitd[fruit] = [(city, count)] 
elif city in [x[0] for x in city_fruitd[fruit]]: 
    index = [city_fruitd[fruit].index(x) for x in city_fruitd[fruit] if city == x[0]][0] 
    city_fruitd[fruit][index] = [(city, city_fruitd[fruit][index][1] + count)] 
else: 
    city_fruitd[fruit] += [(city, count)] 
1

Вот подход с использованием defaultdict, как описано в комментариях:

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) 

Выход:

[('New York', 1201), ('Los Angeles', 1273), ('Chicago', 675)] 
Смежные вопросы