Python - 从列表元素初始化列表变量
比如,我有一个列表,
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
,这样我就可以使用append
和extend
这些方法来操作这些元素。
像这样,
#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)