2 Вопрос: Python строка в словарь

вопрос создан в Wed, May 8, 2019 12:00 AM

Проблема с добавлением новых записей в переменную /список (словарь).

Я создал программу (адресную книгу) и импортировал файл .csv (заголовки, имя, фамилия, улица и т. д.). Я использую csvDictreader и затем я добавил адреса в пустой список. Теперь я могу искать адреса. Но у меня проблема с добавлением новых записей в список. Я могу добавить новую запись, но она, кажется, не добавляет новую запись в правильном направлении. Причина, когда я хочу напечатать новую запись: «Ошибка ввода», объект «set» недопустим.

В коде, который я добавил, последний цикл For возвращает ошибку. Вероятно, я не добавляю новую запись в список правильным способом. Я могу использовать некоторую помощь. (да, я новичок в Python: -)

import sys
import csv

filename = "adresses.csv"
adressbook = []

with open(filename) as f:
    csv_reader = csv.DictReader(f, delimiter=",")
    for row in csv_reader:
        adressbook.append(row)

for row in adressbook:
    print(row['lastname'])

value = input("lastname: ")
adressbook.append({value})

for row in adressbook:
    print(row)

for row in adressbook:
    print(row['lastname'])

введите описание ссылки здесь

    
- 3
  1. Добро пожаловать, krukkie. Вы можете добавить подробности об ошибке в виде теста, а не изображения. Кроме того, я рекомендую вам прочитать stackoverflow.com/help/how-to-ask
    2019-05-08 18: 35: 43Z
2 ответа                              2                         

Строки:

value = input("lastname: ")
adressbook.append({value})

добавляет в список addressbook набор , содержащий один элемент value. Когда вы напишете позже:

for row in adressbook:
    print(row['lastname'])

Последняя строка просто {value}, и вы получаете ошибку, поскольку вы не можете получить значение, связанное с ключом lastname, из набора:

>>> {"tobie"}["lastname"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object is not subscriptable

В список следует добавлять только dicts, а не sets. Чтобы добавить новую строку в книгу, вы должны написать:

value = input("lastname: ")
adressbook.append({"lastname": value})

Очевидно, это будет почти пустой ряд (без названия, улицы и т. д.).

    
0
2019-05-08 16: 04: 42Z

Добавление записи таким образом было решением. adressbook.append (OrderedDict ([("фамилия", значение [0] .lower ()),                 ("имя", значение [1] .lower ())

    
0
2019-05-13 18: 33: 40Z
источник размещен Вот