имя переменной с добавлением в список дополнений python - PullRequest
0 голосов
/ 12 сентября 2018

У меня много переменных,

df_foo_1_100 = 4
df_foo_1_1000 = 5
...
df_foo_1_1000000 = 100

df_foo_2_100 = 9 
df_foo_2_1000 = 10 
df_foo_2_1000000 = -100

df_foo_4_100 = -1000

и иметь пустой список, temp=[] Как этот пустой список может содержать все переменные, используя цикл?

Это мой код,

index = [1,2,4,8,16,32,64]
index2 = [100, 1000, 10000, 100000, 1000000]
for i in index:
    for j in index2:
        temp.append(df_foo_{0}_{1}.format(i, j))

но не повезло.
Как я могу исправить этот цикл, чтобы я мог получить вывод,

[df_1_100, df_1_1000... ]

(Внутри списка не строка, а имя переменной)

========== edit ========== Дикт хорошо, как хорошо. результат dict будет похож, {df_foo_1_100: 4, df_foo_1_1000: 5 ...}

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

У вас должен быть какой-то способ получить значение переменной по имени.Вы можете вручную добавить их в dict или использовать для этого встроенную функцию locals().

df_foo_1_100 = "test_1_100"
df_foo_1_1000 = "test_1_1000"
df_foo_1_10000 = "test_1_10000"

df_foo_2_100 = "test_2_100"
df_foo_2_1000 = "test_2_1000"
df_foo_2_10000 = "test_2_10000"

df_foo_4_100 = "test_4_100"
df_foo_4_1000 = "test_4_1000"
df_foo_4_10000 = "test_4_10000"

df_foo_7_100 = "other_junk" # Not included...                                                                                                                                                               

import itertools
index1 = ["1", "2", "4"]
index2 = ["100", "1000", "10000"]
all_index_combos = list(itertools.product(index1, index2))
all_index_variables = set(["df_foo_{0}_{1}".format(ind1, ind2) for ind1, ind2 in all_index_combos])
dfs = [var for name, var in locals().items() if name in all_index_variables]
print(dfs)

при этом выдает

['test_1_100', 'test_1_1000', 'test_1_10000', 'test_2_100', 'test_2_1000', 'test_2_10000', 'test_4_100', 'test_4_1000', 'test_4_10000']

по желанию.

Если вы хотите dict, просто замените

dfs = [var for name, var in locals().items() if name in all_index_variables]

на

dfs = dict([(name, var) for name, var in locals().items() if name in all_index_variables])

, который выдаст:

{'df_foo_1_100': 'test_1_100', 'df_foo_1_1000': 'test_1_1000', 'df_foo_1_10000': 'test_1_10000', 'df_foo_2_100': 'test_2_100', 'df_foo_2_1000': 'test_2_1000', 'df_foo_2_10000': 'test_2_10000', 'df_foo_4_100': 'test_4_100', 'df_foo_4_1000': 'test_4_1000', 'df_foo_4_10000': 'test_4_10000'}
0 голосов
/ 12 сентября 2018

Вы можете попробовать повысить функцию exec.

index = [1,2,4,8,16,32,64]
index2 = [100, 1000, 10000, 100000, 1000000]
for i in index:
    for j in index2:
        exec("temp_variable = df_foo_{0}_{1}".format(i, j))
        temp.append(temp_variable)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...