Сборка словаря из файла и os.listdir python

1

Я использую 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

Спасибо за прочтение!

Теги:
file
for-loop
dictionary

1 ответ

2
Лучший ответ

Вы хотите одновременно перебрать имена файлов и строки входного файла. Замените вложенные циклы на

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')).

  • 0
    Это работает, и я отстой, потому что я потратил два дня на это! Я думаю, что у меня есть проблема с петлями ..... большое спасибо за это!
  • 0
    @eikonal: пожалуйста. Не забудьте принять этот ответ.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню