2013-04-10 156 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]得到它。