Преобразовать строку в имя списка (PYTHON)
Есть список строк:
['Str0', 'Str1', 'Str2', 'Str3']
Есть ли в Пайтоне возможность преобразовать его в несколько соответствующих списков?
Str0 = []
Str1 = []
Str2 = []
Str3 = []
Ответы (3 шт):
Автор решения: mrBars1k
→ Ссылка
Не представляю зачем, но вот:
list1 = ['Str0', 'Str1', 'Str2', 'Str3']
for i in list1:
exec("%s = %s" % (i, [1, 'тест', 4.5]))
print(Str0)
print(Str1)
print(Str2)
print(type(Str3))
Возможно, есть более верные решения, но пока так.
Автор решения: Andy Pavlov
→ Ссылка
По мне лучший вариант создать словарь с соответствующими ключами, но если хочется именно переменные, то можно попробовать поработать со словарем локальных locals() или глобальных globals() переменных.
lst = ['Str0', 'Str1', 'Str2', 'Str3']
g = locals()
for e in lst:
g[e] = []
print(type(Str0))
print(type(Str1))
print(type(Str2))
print(type(Str3))
Автор решения: nexoma
→ Ссылка
есть вариант решения с https://stackoverflow.com/questions/16681264/convert-list-to-variables-in-python-3
>>> fieldValues = ['Str0', 'Str1', 'Str2', 'Str3']
>>> for val in fieldValues: locals()['{0}'.format(val)] = '111'
...
>>> locals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7efdccc2bc10>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'sys': <module 'sys' (built-in)>, 'ver': '3.10', 'username': 0, 'password': 1, 'enum': <module 'enum' from '/usr/lib64/python3.10/enum.py'>, 'fieldValues': ['Str0', 'Str1', 'Str2', 'Str3'], 'val': 'Str3', 'val1': 1, 'val2': 2, 'valStr0': 'Str0', 'valStr1': 'Str1', 'valStr2': 'Str2', 'valStr3': 'Str3', 'val{0}': 'xStr3', 'valxStr0': 'xStr0', 'valxStr1': 'xStr1', 'valxStr2': 'xStr2', 'valxStr3': 'xStr3', 'x': 'xStr3', 'xStr0': '', 'xStr1': '', 'xStr2': '', 'xStr3': '', 'Str0': '111', 'Str1': '111', 'Str2': '111', 'Str3': '111'}
>>> print(Str0)
111
>>>