[英]How to append a dictionary to another dictionary string key in Python3?
這是我的輸入:
Blue -> dress,jeans,hat
Gold -> dress,t-shirt,boxers
White -> briefs,tanktop
Blue -> dress,gloves
我想要的(結果)字典是這樣的:
result{Blue:{dress:2,jeans:1,hat:1,gloves:1},
Gold:{dress:1,t-shirt:1,boxers:1},
White:{briefs:1,tanktop:1}} #pseudo code
我試過的
n = int(input())
result = {}
for i in range(1, n+1):
input_row = input()
input_parts = input_row.split(' -> ')
color = input_parts[0]
items = input_parts[1].split(',')
for item in items:
if color not in result:
result[color] = color
if item not in result[color]:
dict_items = {item: }
result[color] = dict_items
else:
result[color][item] += 1
print(result)
問題出在這部分,因為它總是覆蓋(正常)它:
result[color] = dict_items
我已經嘗試過.append
, .setdefault
, .update
沒有任何結果。
其他解決方案可能是collections.counter
。
使用collections.defaultdict
和Counter
例如:
from collections import defaultdict, Counter
n = int(input())
result = defaultdict(Counter)
for i in range(1, n+1):
input_row = input()
input_parts = input_row.split(' -> ')
color = input_parts[0]
items = input_parts[1].split(',')
#for item in items:
# result[color] += Counter((item,))
result[color] += Counter(items) #Thanks Sam Mason
print(result)
輸出:
defaultdict(<class 'collections.Counter'>,
{'Blue': Counter({'dress': 2, 'gloves': 1, 'jeans': 1, 'hat': 1}),
'White': Counter({'briefs': 1, 'tanktop': 1}),
'Gold': Counter({'t-shirt': 1, 'dress': 1, 'boxers': 1})})
沒有進口
n = int(input())
result = {}
for i in range(1, n+1):
input_row = input()
input_parts = input_row.split(' -> ')
color = input_parts[0]
items = input_parts[1].split(',')
if not color in result:
result[color] = {}
for item in items:
if item not in result[color]:
result[color].update({item: 0}) #to update dict use the dict.update() methid
result[color][item] += 1
print(result)
輸出:
{'Blue': {'dress': 2, 'gloves': 1, 'hat': 1, 'jeans': 1},
'Gold': {'boxers': 1, 'dress': 1, 't-shirt': 1},
'White': {'briefs': 1, 'tanktop': 1}}
另一種方法是defaultdict(int)
使用defaultdict(int)
:
from collections import defaultdict
# same as your method ...
n = int(input())
result = {}
for i in range(1, n+1):
input_row = input()
input_parts = input_row.split(' -> ')
color = input_parts[0]
items = input_parts[1].split(',')
# differs from your method from here on:
results[color] = defaultdict(int) if color not in results else results[color]
for item in items:
results[colour][item] += 1
我會使用Rakesh的Counter
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.