2015-05-08 76 views
3

我有一個類,它包含多個列表,即:如何根據參數值選擇正確的列表?

class my_class(object): 
    def __init__(self, list_A, list_B, ..., list_Z): 
     self.list_A = list_A 
     (...) 
     self.list_Z = list_Z 

然後我需要將一個元素添加到列表中的一個方法。我現在所做的是在C像開關的情況下

def add_to_list(self, list_name, item): 
    if list_name == 'A': 
     self.list_A.append(item) 
    elif list_name == 'B': 
     self.list_B.append(item) 
    (...) and so on 

它非常uneffective,並且需要大量的工作,如果我想改變一些東西。 有沒有辦法縮短它?我想象的)東西類似的String.Format(

self.list_{}.append(item) .format(list_name) 
+0

怎麼樣清單與適當的鍵 – therealprashant

+0

的字典爲什麼你有26'list_A','list_B'等屬性,而不是26所列出的名單? – user2357112

+0

@ user2357112我需要通過名稱來區分它們,例如citizens_Chicago,citizens_NY,citizens_Washington等。使用數字索引會很麻煩。 – RedFidd

回答

4

不要建立在你的變量名的程序邏輯。請指定一個項目必須滿足的標準,以便分類到特定列表。 如果它的簡單字母順序,只是在你的代碼中表達它。

例子:

class my_class(): 
    def __init__(self): 
     self.list_A = [] 
     self.list_B = [] 
     self.dict = { "A":self.list_A, "B":self.list_B } 

    def add_to_list(self, key): 
     # Logic in here 
     self.dict.get(key[:1]).append(key) 

if __name__ == "__main__": 
    c = my_class() 
    c.add_to_list("Apple") 
    c.add_to_list("Bus") 
    c.add_to_list("Airplane") 
    print(c.dict["A"]) 
    print(c.dict["B"]) 
2

使用getattr訪問屬性

def append(self, list_name, item): 
    getattr(self, 'list_%s' % list_name).append(item) 
0

你可以像這樣藉助字典的幫助。

class base: 
    def __init__(self, * pack): 
     self.dictitems={} 
     for i, j in zip('abcdefg',pack): 
      self.dictitems[i]=j 


    def add(self,list_name,item,key): 

     self.dictitems[key].append(item) 

    def printdict(self): 
     print(self.dictitems) 

a,b,c =[ [] for i in range(3)] 
z=base(a,b,c) 
z.add(b, 5 ,key ='b') 
z.add(b, 7 ,key ='b') 
z.add(c, 7 ,key ='c') 
z.printdict() 
相關問題