我有兩個非唯一的列表,我想將它們壓縮到一個字典中,其中所有非唯一鍵的值都是一個和。我想知道如何做到這一點?對字典中的值進行的操作
keys = ['a', 'b', 'c', 'c']
values = [1, 2, 3, 1]
輸出:
{'a': 1, 'b': 2, 'c': 4}
我有兩個非唯一的列表,我想將它們壓縮到一個字典中,其中所有非唯一鍵的值都是一個和。我想知道如何做到這一點?對字典中的值進行的操作
keys = ['a', 'b', 'c', 'c']
values = [1, 2, 3, 1]
輸出:
{'a': 1, 'b': 2, 'c': 4}
您可以使用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}
你可以像下面這樣做
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
。
簡單地通過每一個鍵循環,看它是否已經在字典中,如果有兩個值加在一起:
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)
看到,因爲它是一本字典,輸出爲隨機順序。
使用常規字典:
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
您可以使用普通的字典沒有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]
你能告訴我們你已經嘗試了什麼? – TheGirrafish