如何在Python3中将字典附加到另一个字典字符串键?

2024-09-28 20:52:51 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的输入:

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。你知道吗


Tags: ininputhatitemsblueresultitemdict
2条回答

使用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)

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方法。你知道吗

相关问题 更多 >