2017-05-29 54 views
1

我有兩個非唯一的列表,我想將它們壓縮到一個字典中,其中所有非唯一鍵的值都是一個和。我想知道如何做到這一點?對字典中的值進行的操作

keys = ['a', 'b', 'c', 'c'] 
values = [1, 2, 3, 1] 

輸出:

{'a': 1, 'b': 2, 'c': 4} 
+0

你能告訴我們你已經嘗試了什麼? – TheGirrafish

回答

3

您可以使用defaultdict

from collections import defaultdict 

keys = ['a', 'b', 'c', 'c'] 
values = [1, 2, 3, 1] 

dct = defaultdict(int) # create the defaultdict - with 0 as default 

for k, v in zip(keys, values): 
    dct[k] += v 

print(dict(dct)) # {'a': 1, 'b': 2, 'c': 4} 

如果你想使用一個普通的字典,你可以使用dict.get零爲默認值:

dct = {} 
for k, v in zip(keys, values): 
    dct[k] = dct.get(k, 0) + v 

print(dct) # {'a': 1, 'b': 2, 'c': 4} 
1

你可以像下面這樣做

outputDict = {} 
keys = ['a', 'b', 'c', 'c'] 
values = [1, 2, 3, 1] 
for index, value in enumerate(keys): 
    if value in outputDict: 
     outputDict[value] += values[index] 
    else: 
     outputDict[value] = values[index] 

print(outputDict) 

#The output is {'a': 1, 'c': 4, 'b': 2} 

注:字典是不排序,因此不必在爲了a,b,c

1

簡單地通過每一個鍵循環,看它是否已經在字典中,如果有兩個值加在一起:

keys = ['a', 'b', 'c', 'c'] 
values = [1, 2, 3, 1] 
new_dict = {} 

for k, v in zip(keys, values): 
    if k in new_dict: 
    new_dict.update({k: new_dict[k] + v}) 
    else: 
    new_dict.update({k: v}) 

print (new_dict) 

看到,因爲它是一本字典,輸出爲隨機順序。

0

使用常規字典:

d = {} 
for k, v in zip(keys, values): 
    d.setdefault(k, 0) 
    d[k] += v 

或默認字典:

from collections import defaultdict 
d = defaultdict(int) 
for k, v in zip(keys, values): 
    d[k] += v 
0

您可以使用普通的字典沒有defaultdict試試這個:

keys = ['a', 'b', 'c', 'c'] 
values = [1, 2, 3, 1] 

new_dict = {} 

for i in zip(keys, values): 
    if i[0] in new_dict: 
     new_dict[i[0]] += i[1] 
    else: 
     new_dict[i[0]] = i[1]