如何根据参数值选择正确的列表?

时间:2015-05-08 09:04:48

标签: python

我有一个包含几个列表的类,即:

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

然后我需要一个方法将一个元素附加到其中一个列表。我现在所做的就是来自C:

switch case
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

它非常无效,如果我想改变一些东西,需要做很多工作。 有没有办法缩短它?我想象类似于 string.format()

的东西
self.list_{}.append(item) .format(list_name)

2 个答案:

答案 0 :(得分: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"])

答案 1 :(得分:2)

使用getattr访问属性

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