Словарь внутри цикла for не переносится наружу для цикла - Python - PullRequest
0 голосов
/ 06 ноября 2018

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

    ref = open("reference.txt", "r")
    contents = ref.read().splitlines()

    for line in contents:
        data = line.split(",")
        i = iter(data)
        newData = dict(zip(i, i))
        print(newData)

    Output:
    {"Bob's Diner": '001100111'}
    {"Jim's Grill": '001100111'}
    {"Tommy's Burger Shack": '01011101'}

Но когда я помещаю оператор print вне цикла for, я получаю другой результат:

    ref = open("reference.txt", "r")
    contents = ref.read().splitlines()

    for line in contents:
        data = line.split(",")
        i = iter(data)
        newData = dict(zip(i, i))

    print(newData)

    Output:
    {"Tommy's Burger Shack": '01011101'}

Как я могу это исправить, чтобы он скомпилировал его в один общий, пригодный для использования словарь?

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

Это происходит потому, что вы создаете новый словарь на каждой итерации цикла. Определение dict вне цикла решит проблему.

0 голосов
/ 06 ноября 2018

Просто попробуйте создать словарь до начала цикла, чтобы данные могли быть там сохранены и извлечены для оператора печати. ​​

ref = open("reference.txt", "r")
contents = ref.read().splitlines()

newData = {}
for line in contents:
    data = line.split(",")
    i = iter(data)
    newData = dict(zip(i, i))

print(newData)
0 голосов
/ 06 ноября 2018

В вашем коде newData указывает на новый словарь в каждой итерации цикла, просто создайте dict снаружи и обновите его:

newData = {}
for line in contents:
    data = line.split(",")
    i = iter(data)
    newData.update(dict(zip(i, i)))

print(newData)
...