Как построить переменную динамически, повторяя цикл for в python - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть куча переменных, как показано ниже. Теперь я хочу построить переменную динамически, как показано ниже, путем перебора цикла for, но удивительно, что это не сработает, так как .format может быть реализован только для строк. Может кто-нибудь поделиться своими мыслями, например, как это может быть реализовано в Py? Любая помощь будет оценена. Спасибо!

build_a="123"
build_b="456"
build_c="789"

build_src = ['a','b','c']
build_list = {}

for word in build_src:
    build_list[word] = build_{word}.format(word=word)

Ответы [ 4 ]

2 голосов
/ 26 апреля 2019

Словарь может быть гораздо лучше подходит для того, что вы пытаетесь достичь.

builds = {'a': "123", 'b': "456", 'c': "789"}
build_src = ['a','b','c']
build_list = {}
for word in build_src:
    build_list[word] = builds.get(word, None)
print build_list

Выход: {'a': '123', 'c': '789', 'b': '456'}

1 голос
/ 26 апреля 2019

Это то, что вы хотите:

build_src = ['a','b','c']
build_list = {}

for word in build_src:
    build_list[word] = 'build_'+word.format(word=word)
print(build_list)

выход:

{'a': 'build_a', 'b': 'build_b', 'c': 'build_c'}
0 голосов
/ 26 апреля 2019

Как указано в большинстве ответов, dict - это решение ваших проблем.

Вариант 1: через пару list с благодаря zip

В этом случае tuple формируется функцией zip, которая возвращает итератор , который потребляется dict.Этот итератор объединяет 2 list с, сохраняя индекс элемента.

Примечание: если вы планируете использовать 2 list с различной длины, вас могут заинтересоватьпри взгляде на zip_longest .

keys = ['a', 'b', 'c']
values = [123, 456, 789]

build_src = zip(keys, values)
build_list = dict(build_src)

Вариант 2: использование dict понимания

Вы можете использовать dict понимания на случай, если вы хотите явно показать цикл в процессе построения dict.

keys = ['a', 'b', 'c']
values = [123, 456, 789]

build_src = zip(keys, values)
build_list = {key: val for key, val in build_src}
0 голосов
/ 26 апреля 2019

вы можете использовать что-то вроде этого:

build_a="123"
build_b="456"
build_c="789"

build_src = ['a','b','c']
build_list = {}

for word in build_src:
    globals()['build_new_var%s' % word] = word

это даст вам то, что вы хотите, что-то вроде этого:

print(build_new_var_a)
print(build_new_var_b)

и вывод будет:

a
b

но использование словаря было бы лучшим решением, но если вам это нужно по определенной причине, вы можете сделать это тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...