2016-11-16 28 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)] 

我創建這些列表的,因爲我通過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

但它是一本字典。或者你的意思是我應該有一本字典詞典而不是元組列表字典?我在創建{'Apples':{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)] 

所以:

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)]