2013-04-10 131 views
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和词incommon是:

一个= 12分

b = 8分

c = 3分

我希望我的问题是可以理解的。我认为它对于所有的陈述和陈述都太混乱了。

+0

你在哪个语言工作?你的伪代码看起来不错,不是特别混乱,你为什么这么想?我看到的唯一的东西是反转循环。首先循环你的列表,然后搜索字典,即为什么字典。 – 2013-04-10 14:23:14

+0

哦,它的python 3.2 – danand7 2013-04-10 20:35:01

回答

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

要测试值的BA键总和大于10:如果你想的A这是在B键的元素列表

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

,你从[k for k in A if k in B]得到它。