2015-05-08 44 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() 
相关问题