2012-12-30 32 views
0

所以,如果我有任何瑣碎的功能,如:Python:運行for循環時,如何將每個解決方案附加到列表中,該列表將附加到新的字典中?

def summation_ind(a,b): 
      summation = 2*a + 3*b 
      if summation < 4: 
       return True 
      else: 
       return False 

A和B都來自數字列表,我有一個循環,例如:

newdict = {} 
newlist = [] 
for a in R: 
      for b in R: 
       if summation(a,b): 
        newlist.append((a,b)) 
newdict['numbs']=set(newlist) 

怎麼辦我這樣做是爲了在每次循環運行時將a和b附加到新列表中,並將新列表附加到新字典中?換句話說,如果有15個與算法配合使用的a,b值組合,有沒有辦法在15個新詞典中創建15個新列表?那可能嗎?

謝謝:)

+0

附加到一個新的列表或附加到'newlist'? –

+1

順便說一下,你可以寫'def summation_ind(a,b):return 2 * a + 3 * b <4' –

+0

我不確定爲什麼'a'和'b'都來自'R',但是確定你有一個理由。 –

回答

1

可以使用defaultdict,使其更簡單。

在你的字典用一組:

from collections import defaultdict 

dictionary = defaultdict(set) 

for a, b in ((a, b) for a in R for b in R): 
    if summation(a, b): 
     dictionary['numbs'].add((a,b)) 

在你的字典,用列表:

from collections import defaultdict 

dictionary = defaultdict(list) 

for a, b in ((a, b) for a in R for b in R): 
    if summation(a, b): 
     dictionary['numbs'].append([a,b]) 

甚至使用list comprehension

dictionary['numbs'] = [(a, b) for a in R for b in R if summation(a, b)] 
+2

'set'需要可散列類型,所以使用'(a,b)'而不是'[a,b]'。 – Bakuriu

+0

@Bakuriu指出,謝謝。 –

+0

@InbarRose感謝您的幫助,但是我需要它在每次代碼運行時創建一個_new_列表和一個隨後的新字典 - 所以對於每個a,b組合。 – Annika