获取嵌套字典值的总和列表

3

我是一名帮助翻译的助手。以下是需要翻译的内容:

我正在尝试编写程序的一部分,用户输入目标单词(targetWord = input()),然后分配一个嵌套字典,键与输入单词相同。

例如:

mainDict = {
    'x': {'one': 1, 'blue': 1, 'green' :1},
    'y': {'red': 1, 'blue': 2, 'two': 1},
    'z': {'one': 1, 'green': 1, 'red': 1}
}

其中嵌套字典中的所有值都被分配了整数。

用户可以输入'x',程序将会分配:

targetDict = mainDict['x']

接下来,程序应该允许用户再次输入单词,但是这一次,所有从输入中获取的单词都将被附加到查找列表中,例如用户输入了'y',然后输入了'z'

lookup = ['y', 'z']

然后程序应该遍历嵌套字典,并为每个与targetDict相应键对应的值仅追加值到新的嵌套列表中,并添加嵌套字典值的任何值。因此,这个部分的输出应该是:

targetOutput = [[2], [1, 1]]

因为在嵌套字典'y'中,只有'blue'是一个共同的键,它的值2被放入列表中,然后附加到'targetOutput'上。在字典'z'中也是同样的情况,键'one'和'green'同时出现在'x'和'z'中,将它们的值1和1放入嵌套列表中。
这是我现有的有问题代码的表示:
targetOutput = []
targetDict = mainDict[targetWord]
for tkey in targetDict:
    tt = []
    for word in lookup:
        for wkey in primaryDict[word]:
            if tkey == wkey:
                tt.append(targetDict[tkey])
tl.append(sum(tt))


print((pl))

最后的sum函数是因为我实际上最终输出应该是嵌套列表中值的总和,类似于:
tl = [[2], [2]]

我也试图做出相反的操作,在另一个列表中,对于查找表中的每个键,它返回一个嵌套列表,其中包含目标字典中也有键的每个值的总和,如下所示:

ll = [[2], [2]]

我的问题是,如何修复我的代码,使其输出上述两个列表?我对字典的使用还很陌生。

2
你的问题很难理解。能否请你或者理解该问题的人重新表达一下? - Ma0
@Ev.Kounis 我需要做很多解释,抱歉。基本上,它应该创建2个嵌套列表,其中主字典中具有与给定目标单词和查找都相同的键的值之和是用户输入。最终,这两个列表在技术上应该打印出相同的内容。 - qqc1037
1个回答

4

字典的.keys()方法可以给你一个字典视图,它可以像集合一样运作。这意味着你可以在两个字典的键视图之间取交集!你想要在初始的targetDictlookup中命名的字典之间取交集:

for word in lookup:
    other_dict = mainDict[word]
    common_keys = targetDict.keys() & other_dict
    targetOutput.append([other_dict[common] for common in common_keys])

"

targetDict.keys() & other_dict 表达式在这里产生了交集:

"
>>> mainDict = {
...     'x': {'one': 1, 'blue': 1, 'green' :1},
...     'y': {'red': 1, 'blue': 2, 'two': 1},
...     'z': {'one': 1, 'green': 1, 'red': 1}
... }
>>> targetDict = mainDict['x']
>>> targetDict.keys() & mainDict['y']
{'blue'}
>>> targetDict.keys() & mainDict['z']
{'green', 'one'}

"

[other_dict[common] for common in common_keys]列表推导式使用这些键从另一个字典中查找相应的值。

如果您想要对这些值进行求和,只需将相同的值序列传递给sum()函数即可:

"
for word in lookup:
    other_dict = mainDict[word]
    common_keys = targetDict.keys() & other_dict
    summed_values = sum(other_dict[common] for common in common_keys)
    targetOutput.append(summed_values)

在将总和值包装到另一个列表中是没有意义的,因为永远只会有一个总和。上述代码会给你一个带有[2, 2]targetOutput列表,而不是[[2], [2]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接