Я использую os.listdir и файл для создания словаря. Я получаю от них ключи и значения.
os.listdir дает мне:
EVENT3180
EVENT2894
EVENT2996
и из файла, который я получаю:
3.1253 -32.8828 138.2464
11.2087 -33.2371 138.3230
15.8663 -33.1403 138.3051
Основная проблема заключается в том, что мой последний словарь имеет разные ключи, но всегда то же значение, которое не то, что я хочу. То, что я пытаюсь получить, это:
{'EVENT3180': 3.1253 -32.8828 138.2464, 'EVENT2894': 11.2087 -33.2371 138.3230, 'EVENT2996': 15.8663 -33.1403 138.3051}
Поэтому я думаю, что мой код перебирает ключи, но не превышает значения. Во всяком случае, мой код до сих пор:
def reloc_event_coords_dic ():
event_list = os.listdir('/Users/working_directory/observed_arrivals_loc3d')
adict = {}
os.chdir(path) # declared somewhere else
with open ('reloc_coord_complete', 'r') as coords_file:
for line in coords_file:
line = line.strip() #Gives me the values
for name in event_list: # name is the key
entry = adict.get (name, [])
entry.append (line)
adict [name] = entry
return adict
Спасибо за прочтение!
Вы хотите одновременно перебрать имена файлов и строки входного файла. Замените вложенные циклы на
for name, line in zip(event_list, coords_file.readlines()):
adict.setdefault(name, []).append(line.strip())
где я позволил сжать тело циклы в одну линию.
Если количество обрабатываемых данных чрезвычайно велико, замените zip
на ленивый кузен izip
:
from itertools import izip
for name, line in izip(event_list, coords_file):
# as before
Btw., Делая chdir
в середине функции только для захвата одного файла, является запахом кода. Вы можете легко открыть нужный файл с open(os.path.join(path, 'reloc_coord_complete'))
.