繁体   English   中英

如何在python中动态地将元组值保存到变量中?

[英]How to save tuple value into variable dynamically in python?

我需要将元组列表动态保存到字符串变量中。 你能帮我么?

例子:

lst = [('kol_id', '101152'), ('jnj_id', '7124166'), ('thrc_nm', 'VIR')]

期望输出:

input_v1 = ('kol_id', '101152')
input_v2 = ('jnj_id', '7124166')
input_v3 = ('thrc_nm', 'VIR')

您可以将其保存在字典中。

lst = [('kol_id', '101152'), ('jnj_id', '7124166'), ('thrc_nm', 'VIR')]

d = {}

for i, element in enumerate(lst, 1):
    d[f'input_v{i}'] = element

所以d是:

{'input_v1': ('kol_id', '101152'), 'input_v2': ('jnj_id', '7124166'), 'input_v3': ('thrc_nm', 'VIR')}

灵感来自@baduker 尝试使用exec()的想法

>>> lst = [('kol_id', '101152'), ('jnj_id', '7124166'), ('thrc_nm', 'VIR')]
>>> for i,val in enumerate(lst):
...     exec('input_v{} = {}'.format(i+1,val))
>>> input_v1
('kol_id', '101152')
>>> input_v2
('jnj_id', '7124166')
>>> input_v3
('thrc_nm', 'VIR')

exec()将为您执行传入字符串的任何内容。

尝试这个:

lst = [('kol_id', '101152'), ('jnj_id', '7124166'), ('thrc_nm', 'VIR')]
def get_values(l):
    for idx, item in enumerate(l, start=1):
        yield f"input_v{idx} = {item}"
    
for _input in get_values(lst):
    print(_input)

这打印出来:

input_v1 = ('kol_id', '101152')
input_v2 = ('jnj_id', '7124166')
input_v3 = ('thrc_nm', 'VIR')

我不建议将元组列表保存到多个变量。

将元组放入一个数据结构中会更具可扩展性,例如字典:

>>> lst = [('kol_id', '101152'), ('jnj_id', '7124166'), ('thrc_nm', 'VIR')]
>>> dic = {f"input_v{index}": tup for index, tup, in enumerate(lst, start=1)}
>>> dic
{'input_v1': ('kol_id', '101152'), 'input_v2': ('jnj_id', '7124166'), 'input_v3': ('thrc_nm', 'VIR')}
>>> dic['input_v1']
('kol_id', '101152')
>>> dic['input_v2']
('jnj_id', '7124166')
>>> dic['input_v3']
('thrc_nm', 'VIR')

如果我理解问题

lst = [('kol_id', '101152'), ('jnj_id', '7124166'), ('thrc_nm', 'VIR')]

for i, val in enumerate(lst):
    globals()[f'input_v{i + 1}'] = val # using f-string, python 3.6+

>>> input_v1
('kol_id', '101152')
>>> input_v2
('jnj_id', '7124166')
>>> input_v3
('thrc_nm', 'VIR')

但我觉得有些不对劲。 我更喜欢字典。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM