Python - 从列表元素初始化列表变量

0 投票
3 回答
6691 浏览
提问于 2025-04-17 14:02

比如,我有一个列表,

list_var = ['sales_qty' , 'returns_qty' , 'net_sales_qty' , 'sales_amt' , 'returns_amt' ,'product_discount_amt' , 'product_net_amt' ,'product_cost_amt' , 'gross_sales_amt' , 'supplier_disc_amt' , 'category_disc_amt' , 'topup_disc_amt' , 'value_at_cost']

我想把这个列表里的元素在内存中初始化成一个list,这样我就可以使用appendextend这些方法来操作这些元素。

像这样,

#Need these variable in memory..
sales_qty = [], returns_qty  = [], net_sales_qty = [] ... value_at_cost = []

#list operation on variable..
sales_qty.append(5)

有没有什么简单的方法可以做到这一点,这样我就可以轻松地添加或删除列表中的元素?

3 个回答

0

你的意思是像这样:

list_var = [ 'abc', 'cde', 'fgh' ]

dict_var = dict()
for x in list_var:
    dict_var[x] = []

dict_var['abc'].append(5)
2

如果你是在全局范围内调用,使用 vars。如果不是,就用 globals

list_var = ['sales_qty' , 'returns_qty' , 'net_sales_qty' , 'sales_amt' , 'returns_amt' ,'product_discount_amt' , 'product_net_amt' ,'product_cost_amt' , 'gross_sales_amt' , 'supplier_disc_amt' , 'category_disc_amt' , 'topup_disc_amt' , 'value_at_cost']

for item in list_var:
    vars()[item] = []

sales_qty.append(1)
sales_qty.append(3)
returns_qty.append(2)

print "Outside..."
print sales_qty
print returns_qty


def foo():
    global sales_qty

    sales_qty.append(4)

    print "Inside foo..."
    print sales_qty
    print returns_qty

    # This works if you want the whole thing inside a function
    print "Variable from inside foo..."
    globals()["new_var"] = []
    new_var.append(5)
    print new_var

foo()

print "Outside again..."
print sales_qty
print returns_qty

输出结果:

>>> 
Outside...
[1, 3]
[2]
Inside foo...
[1, 3, 4]
[2]
Variable from inside foo...
[5]
Outside again...
[1, 3, 4]
[2]
>>> 
5

你可以根据 list_var 创建一个包含列表的字典。

list_var = ['sales_qty' , 'returns_qty' , 'net_sales_qty' , 'sales_amt' , 'returns_amt' ,'product_discount_amt' , 'product_net_amt' ,'product_cost_amt' , 'gross_sales_amt' , 'supplier_disc_amt' , 'category_disc_amt' , 'topup_disc_amt' , 'value_at_cost']

list_dic = {k: [] for k in list_var}

现在你可以通过 list_dic 这个字典来访问你的列表:

list_dic['sales_qty'].append(123)
list_dic['category_disc_amt'].append('abc')

如果你使用的 Python 版本不支持字典推导式(比如 Python 2.6 或更低版本),你可以用列表推导式来代替(就像 DSM 在他的评论中解释的那样):

list_dic = dict((k, []) for k in list_var)

撰写回答