python - 获取求和的嵌套字典值列表
问题描述
我正在尝试编写程序的一部分,其中用户输入目标词(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]]
因为在嵌套的 dict'y'
中,只有'blue'
一个公共键,它的值2
被放在一个列表中,然后附加到targetOutput
. 与 dict 相同的情况'z'
,其中键'one'
and'green'
都出现在'x'
and中,'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]]
我也试图让相反的事情发生,在另一个列表中查找每个键,它返回一个嵌套列表,其中包含targetWord
字典也有一个键的每个值的总和,例如:
ll = [[2], [2]]
我的问题是,如何修复我的代码以输出上述 2 个列表?我对字典很陌生。
解决方案
字典上的.keys()
方法为您提供了一个字典视图,它可以像一个集合一样工作。这意味着您可以在两个字典的关键视图之间进行交集!您想要 initaltargetDict
和名为 in 的字典之间的交集lookup
:
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)
将总和值包装在另一个列表中是没有意义的,因为只有一个总和。以上为您提供了一个targetOutput
列表[2, 2]
,而不是[[2], [2]]
。
推荐阅读
- tensorflow - 运行 object_detection_tutorial TypeError 的问题:load() 缺少 2 个必需的位置参数
- linux - 工作时sqlmap语法不问任何问题
- python - 查找不包含任何字符 ( . - \ / ) 的列表元素
- reactjs - docz 构建失败 - 无法解析“文件路径”中的“dom-helpers/util/requestAnimationFrame”
- java - Android Studio:如何将变量从一个 java 文件保存到另一个
- mongodb - 如何在 MongoDB 分片集群中处理不同的服务器类型
- c# - 尝试使用 PNG C# 发布多表单
- python - 如何在 Python 中以小时、分钟和秒显示“X”轴刻度?
- ios - 复杂布局的动态 CollectionViewHeader 单元格大小
- java - 虽然我设置了JAVA_Home,但是系统找不到