Распакуйте итератор в словарь с помощью itertools - PullRequest
0 голосов
/ 23 января 2020

Есть ли способ достичь этого без вложенности? Прямо сейчас в данный момент «config_file_main» содержит 3 параметра, но в действительности их будет около 10. Я знаю, что можно использовать понимание списка, но с 10 параметрами я не думаю, что это будет очень читабельным. Я бросил "random_value" в качестве ключа для примера параметра, который может оставаться неизменным для каждой конфигурации. Следует отметить, что количество файлов может быть изменено от 1 до 10 файлов. Константы затухания также произвольны, в случае необходимости они могут быть целыми числами.

Вот рабочее решение.

attenuation_scalar = [.3, .1, .2, 5]
random_value = 5

# files = ['test1']
files = ['test1', 'test2']
# files = ['test1', 'test2', 'test3']

for i in itertools.product(attenuation_scalar, repeat=len(files)):
    config_file_main = [] 
    for f, ii in zip(files, i):
        config_file = {
            'attenuation': ii,
            'file': f,
            'random_Value': random_value
        }


        config_file_main.append(config_file)
    # do stuff to config file
    print(config_file_main)
    print('')

Вот что я имею в виду, распаковывая итератор в словарь.

attenuation_scalar = [.3, .1, .2, 5]
random_value = 5

# files = ['test1']
files = ['test1', 'test2']
# files = ['test1', 'test2', 'test3']

config_file_main = [] 
for i in itertools.product(attenuation_scalar, repeat=len(files)):
    config_file = {
        'attenuation': *files,
        'file': *i,
        'random_Value': random_value
        } 
    config_file_main.append(config_file)
# do stuff to config file
print(config_file_main)
print('')

1 Ответ

0 голосов
/ 23 января 2020
config_file_main = [dict(attenuation=ii, file=f, random_value=random_value) for i in itertools.product(attenuation_scalar, repeat=len(files))for f, ii in zip(files, i) ]

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

...