所以,我想检查列表 A 和字典 B 是否有一些共同的单词。然后我想检查常用单词(键)的值的总和是否高于 10。我希望能够以简单的方式做到这一点。
示例(无法正常工作):
A = ['a','b','c','e']
B = {'a': 12, 'b': 8, 'c':3,'d':15}
TheSum = 0
for key,value in B.items():
if key in A:
TheSum += int(value)
if TheSum > 10:
print ("The sum of the values are higher than 10 and the words incommon are:")
print (key,"=", value,"points")
else:
print ("Nothing in common")
我想要打印:
值的总和大于 10,常见的单词是:
a = 12 分
b = 8 分
c = 3 分
我希望我的问题是可以理解的。我认为所有的 for 和 if 语句都太困惑了。
最佳答案
我会使用set
,然后使用生成器表达式。可能更容易展示。首先我们得到共同的元素:
>>> A = ['a','b','c','e']
>>> B = {'a': 12, 'b': 8, 'c':3,'d':15}
>>> set(A).intersection(B)
set(['a', 'c', 'b'])
然后我们可以计算与这些键关联的 B 值的总和:
>>> common = set(A).intersection(B)
>>> sum(B[k] for k in common)
23
如果大于 10,则打印一些内容。
现在,您正在循环 B 中的每个键、值对(好的),然后检查该键是否在 A 中(这可以工作,但会很慢,因为为了测试 a 中的成员资格)如果键在 A 中,则需要累加 TheSum。这部分确实有效。
但是您在累积和 > 10 之后打印每个键/值对,我认为这不是您想要的。
关于python - 比较列表和字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15928463/