2

所以,我想检查列表 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 语句都太混乱了。

4

2 回答 2

4

我会使用一个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 中,则累积 TheSum。那部分确实有效。

但是您在累积总和 > 10 之后打印每个键/值对,我认为这不是您所追求的。

于 2013-04-10T14:30:28.227 回答
1

B要测试带有键的值的总和A是否大于 10:

if sum(B[k] for k in A if k in B):
    print("sum higher than 10")
else:
    print("sum lower than 10")

如果你想要一个元素列表,A其中的键是 in B,你可以从[k for k in A if k in B].

于 2013-04-10T14:37:36.973 回答