比较列表和字典

时间:2013-04-10 14:18:47

标签: python list dictionary compare

所以,我想检查列表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,而incommon是:

a = 12分

b = 8分

c = 3分

我希望我的问题是可以理解的。我认为所有的for-和if-statments都太乱了。

2 个答案:

答案 0 :(得分: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,我不认为你是在追求什么。

答案 1 :(得分:1)

测试BA中的值与if sum(B[k] for k in A if k in B): print("sum higher than 10") else: print("sum lower than 10") 中的值的总和是否大于10:

A

如果您想要一个B元素列表,这些元素是[k for k in A if k in B]中的键,那么您可以从{{1}}获取它。