簡體   English   中英

如何在Python3中將字典追加到另一個字典字符串鍵?

[英]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.defaultdictCounter

例如:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM