У меня есть код, который генерирует список из 28 словарей. Он циклически проходит через 28 файлов и связывает точки данных с каждым файлом в соответствующем словаре. Для того, чтобы сделать мой код более гибким, я хотел бы использовать:Создание списка словарей
tegDics = [dict() for x in range(len(files))]
Но когда я запускаю код первые 27 словарей являются пустыми и только последние, tegDics [27], имеет данные. Ниже приведен код, в том числе и неуклюжий, но функциональный, код мне приходится использовать, что формирует словари:
x=0
import os
files=os.listdir("DirPath")
os.chdir("DirPath")
tegDics = [{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}] # THIS WORKS!!!
#tegDics = [dict() for x in range(len(files))] - THIS WON'T WORK!!!
allRads=[]
while x<len(tegDics): # now builds dictionaries
for line in open(files[x]):
z=line.split('\t')
allRads.append(z[2])
tegDics[x][z[2]]=z[4] # pairs catNo with locNo
x+=1
Кто-нибудь знает, почему более элегантный код не работает.
Хорошая находка! Я пропустил, что 'х' был повторно использован. Вы должны научить OP о '' для каждого 'типа петель Python, а также с помощью 'enumerate()' или 'zip()'. –
Не знал о _ конвенции, предположим, что немного опасно смешиваться с привычками gettext, но – deinonychusaur
Не стесняйтесь оторваться от конвенции, если вы беспокоитесь о подобных миксах. Мне также нравится использовать переменную 'i' как мою ', которая никогда не используется ничем, кроме циклов диапазона. – Kevin