Как вернуть словарь Python для использования в другой функции? - PullRequest
0 голосов
/ 31 мая 2018

В этой функции я читаю из файла .txt и сохраняю значения в словаре.Я хочу иметь возможность передать этот словарь в другую функцию, чтобы выполнять дальнейшие вычисления и сортировку.

Мне удается распечатать все строки из файла .txt, но это все.

Returnразрывает цикл и выдает только первую строку.

Глобальные переменные и вложенные функции имеют плохую форму.

Попытка использовать yield (впервые), но это только выводит на печать объект-генераторget_all_client_id at 0x03369A20 "

file_with_client_info = open("C:\\Users\\clients.txt", "r")

def get_all_client_id():
    client_details = {}

     for line in file_with_client_info:
        element = line.split(",")
        while element:
            client_details['client_id'] = element[0]
            client_details['coordinates'] = {}
            client_details['coordinates']['lat'] = element[1]
            client_details['coordinates']['long'] = element[2]
            break

        print(client_details)

1 Ответ

0 голосов
/ 31 мая 2018

В вашем коде есть несколько ошибок.

  1. Используйте оператор return для вывода словаря.

  2. while-loop не зацикливается, поскольку вы прерываете первую итерацию.Используйте оператор if , чтобы проверить, является ли строка пустой.

  3. Последние записи в тексте client_details перезаписываются на каждой итерации.Вместо этого создайте новую запись, вероятно, используя client_id в качестве ключа.

  4. Рекомендуется использовать менеджер контекста with для открытия файла.

  5. Желательно предоставить имя вашего файла для вашей функции и позволить ему открыть его вместо того, чтобы иметь глобально открытый файл.

Вот исправленная версия вашегокод.

def get_all_client_id(file):
    client_details = {}

    with open(file, 'r') as f:
        for line in f:
            element = line.strip().split(',')
            if element:
                client_id, lat, long, *more = element
                client_details[client_id] = {'lat': lat, 'long': long}

    return client_details

clients_dict = get_all_client_id("C:\\Users\\clients.txt")
...