Как записать данные в словарь python
Перейти к содержимому

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

  • автор:

Ввод данных словаря с клавиатуры

Подскажите, пожалуйста, как задать словарь с клавиатуры (через input )? К примеру, в моем словаре должны храниться даты и события. Могу ли я использовать этот код? То есть я ввожу год и соответствующее событие в истории.

Отслеживать
1,622 2 2 золотых знака 5 5 серебряных знаков 27 27 бронзовых знаков
задан 27 янв 2021 в 16:02
StopTalking StopTalking
9 1 1 золотой знак 1 1 серебряный знак 3 3 бронзовых знака
вы хотя бы написали что именно в словаре должно храниться
27 янв 2021 в 16:02

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

data = dict() while True: key = input('введите ключ: ') value = input('введите значение: ') data[key] = value 

только какой-нибудь механизм выхода из цикла прикрутить стоит

Отслеживать
ответ дан 27 янв 2021 в 16:04
37.5k 4 4 золотых знака 28 28 серебряных знаков 77 77 бронзовых знаков

Подскажите, как мне остановить этот цикл? То есть я ввёл достаточное количество ключей и значений и хочу получить заполненный словарь.

28 янв 2021 в 7:51

@StopTalking, например можете проверять что в качестве ключа ввели stop и делать if key == ‘stop’: break — логику уже вам выбирать то, универсальных средств нет

28 янв 2021 в 8:43

Спасибо я понял и немного изменил. Я написал код, но не получается выбрать те даты, которые входят в промежуток 19 века, можете посмотреть, как лучше поменять? data = dict() while True: key = (input(‘введите дату: ‘)) value = input(‘введите событие: ‘) data[key] = value if input(‘Продолжать? /Нет ‘) == ‘Нет’ : # при нажатии «enter» заполнение словаря # продолжится, при вводе «Нет» цикл прервется break if 1799 — ‘)

Словари в Python

Иногда данные очень связаны. Настолько, что хранить их хочется вместе. Например, соответствие столиц:

Россия: Москва
Китай: Пекин
США: Вашингтон

Если вы знаете о списках, вы можете сделать это так:

countries = ["Россия", "Китай", "США"] capitals = ["Москва", "Пекин", "Вашингтон"] 

Но это всё ещё не круто. При работе со списками может случиться казус. Например, мы решим удалить Китай и добавить Францию:

["Россия", "США", "Франция"] ["Москва", "Пекин", "Вашингтон"] 

Теперь Столица США – Пекин, а Франции – Вашингтон. Списки – не очень удобный инструмент для хранения пар данных, для такого используют словари:

capitals_mapping =  "Россия": "Москва", "США": "Вашингтон", "Китай": "Пекин" > 

Словарь — это способ хранить связи между штуками (обычно строками, но можно использовать и другие виды данных). Так же, как в обычном словаре: англо-русский словарь хранит связи между русскими словами и английскими. Так же и в питоне, словарь хранит пары элементов. Зная первый, всегда можно получить второй по ключу:

russian_capital = capitals_mapping["Россия"] print(russian_capital) 

Это тоже работает как в обычном словаре: зная русское слово вы всегда можете найти его перевод в русско-английском словаре. Зная первый элемент, всегда можно получить второй. Поэтому первый элемент называют ключ, а второй — значение. В коде выше мы получили значение «Москва» , сказав словарю ключ «Россия» .

Добавить элемент в словарь

Чтобы добавить новую пару элементов в словарь, можно прировнять его значение по этому ключу:

capitals_mapping["Франция"] = "Париж" print(capitals_mapping) 

Выведется словарь с новой парой:

'Россия': 'Москва', 'Китай': 'Пекин', 'США': 'Вашингтон', 'Франция': 'Париж'> 

Убрать элемент из словаря

Элементы из словаря удаляются немного странно:

del capitals_mapping['Россия'] print(capitals_mapping) # Выведется словарь без пары Россия-Москва: # 

Отредактировать словарь

Значения ключей можно менять так же, как создаются новые:

capitals_mapping["Франция"] = "Новый Париж" 

Что дальше

Если статья не смогла объяснить что же такое словари или вы хотите почитать о них ещё, подойдут эти статьи:

  • О словарях на metanit
  • О словарях на pythontutor
  • Примеры использования словарей с циклами и условиями

Попробуйте бесплатные уроки по Python

Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.

Переходите на страницу учебных модулей «Девмана» и выбирайте тему.

Из txt файла в dict на Python

Вы хотите чтобы значения были типа set? (как в примере в вопросе показано) Или обычных списков (list) достаточно?

31 дек 2016 в 9:47
@jfs судя по всему автору уже и не нужно. наверняка, ему необходимы повторяющиеся списки
31 дек 2016 в 16:17

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Файл—это итератор над строками в Питоне, поэтому его можно передать в цикл напрямую:

d = <> with open("файл.txt") as file: for line in file: key, *value = line.split() d[key] = value 

with -конструкция закрывает файл, при выходе из блока, чтобы избежать утечки ресурсов даже если произойдёт ошибка.

.split() разбивает строку по произвольному пробелу, позволяя использовать к примеру табы ( ‘\t’ ) или несколько пробелов подряд для разделения полей в строке.

как записать словарь в csv?

всем привет! Небольшая проблемка. Есть csv, его нужно считать и данные с определённых полей записать в другой csv. Исходный файл я зачитал в словарь, но при записи в конечный файл записывается только последня строка исходго файла, но во все строки где должны быть другие данные. Немогу понять что не так.

import csv d = <> with open("dhl.csv", "r") as f: reader = csv.DictReader(f, delimiter = ";") for row in reader: d.update(row) with open("DHL-VLS-Export.csv", "w", newline = "") as output: names = ['Sendungsnummer', 'Sendungsdatum', 'Absender Name 1', 'Absender Name 2', 'Absender Name 3', 'Absender Straße', 'Absender Hausnummer', 'Absender PLZ', 'Absender Ort', 'Absender Provinz', 'Absender Land', 'Absenderreferenz', 'Absender E-Mail-Adresse', 'Absender Telefonnummer', 'Empfänger Name 1', 'Empfänger Name 2 / Postnummer', 'Empfänger Name 3', 'Empfänger Straße', 'Empfänger Hausnummer', 'Empfänger PLZ', 'Empfänger Ort', 'Empfänger Provinz', 'Empfänger Land', 'Empfängerreferenz', 'Empfänger E-Mail-Adresse', 'Empfänger Telefonnummer', 'Gewicht', 'Länge', 'Breite', 'Höhe', 'Produkt- und Servicedetails', 'Retourenempfänger Name 1', 'Retourenempfänger Name 2', 'Retourenempfänger Name 3', 'Retourenempfänger Straße', 'Retourenempfänger Hausnummer', 'Sendungsreferenz', 'Retourenempfänger Ort', 'Retourenempfänger Provinz', 'Retourenempfänger Land', 'Retourenrempfänger E-Mail-Adresse', 'Retourenempfänger Telefonnummer', 'Retouren-Abrechnungsnummer', 'Abrechnungsnummer', 'Service - Versandbestätigung - E-Mail Text-Vorlage', 'Service - Versandbestätigung - E-Mail-Adresse', 'Service - Nachnahme - Kontoreferenz', 'Service - Nachnahme - Betrag', 'Service - Nachnahme - IBAN', 'Service - Nachnahme - BIC', 'Service - Nachnahme - Zahlungsempfänger', 'Service - Nachnahme - Bankname', 'Service - Nachnahme - Verwendungszweck 1', 'Service - Nachnahme - Verwendungszweck 2', 'Service - Transportversicherung - Betrag', 'Service - Weltpaket - Vorausverfügungstyp', 'Service - DHL Europaket - Frankaturtyp', 'Sendungsdokumente - Ausfuhranmeldung', 'Sendungsdokumente - Rechnungsnummer', 'Sendungsdokumente - Genehmigungsnummer', 'Sendungsdokumente - Bescheinigungsnummer', 'Sendungsdokumente - Sendungsart', 'Sendungsdokumente - Beschreibung', 'Sendungsdokumente - Entgelte', 'Sendungsdokumente - Gesamtnettogewicht', 'Sendungsdokumente - Beschreibung (WP1)', 'Sendungsdokumente - Menge (WP1)', 'Sendungsdokumente - Zollwert (WP1)', 'Sendungsdokumente - Ursprungsland (WP1)', 'Sendungsdokumente - Zolltarifnummer (WP1)', 'Sendungsdokumente - Gewicht (WP1)', 'Sendungsdokumente - Beschreibung (WP2)', 'Sendungsdokumente - Menge (WP2)', 'Sendungsdokumente - Zollwert (WP2)', 'Sendungsdokumente - Ursprungsland (WP2)', 'Sendungsdokumente - Zolltarifnummer (WP2)', 'Sendungsdokumente - Gewicht (WP2)', 'Sendungsdokumente - Beschreibung (WP3)', 'Sendungsdokumente - Menge (WP3)', 'Sendungsdokumente - Zollwert (WP3)', 'Sendungsdokumente - Ursprungsland (WP3)', 'Sendungsdokumente - Zolltarifnummer (WP3)', 'Sendungsdokumente - Gewicht (WP3)', 'Sendungsdokumente - Beschreibung (WP4)', 'Sendungsdokumente - Menge (WP4)', 'Sendungsdokumente - Zollwert (WP4)', 'Sendungsdokumente - Ursprungsland (WP4)', 'Sendungsdokumente - Zolltarifnummer (WP4)', 'Sendungsdokumente - Gewicht (WP4)', 'Sendungsdokumente - Beschreibung (WP5)', 'Sendungsdokumente - Menge (WP5)', 'Sendungsdokumente - Zollwert (WP5)', 'Sendungsdokumente - Ursprungsland (WP5)', 'Sendungsdokumente - Zolltarifnummer (WP5)', 'Sendungsdokumente - Gewicht (WP5)', 'Sendungsdokumente - Beschreibung (WP6)', 'Sendungsdokumente - Menge (WP6)', 'Sendungsdokumente - Zollwert (WP6)', 'Sendungsdokumente - Ursprungsland (WP6)', 'Sendungsdokumente - Zolltarifnummer (WP6)', 'Sendungsdokumente - Gewicht (WP6)', 'Sendungsnummer', 'Sendungsreferenz (Retoure)', 'Absender Adresszusatz 1', 'Absender Adresszusatz 2', 'Absender Zustellinformation', 'Absender Ansprechpartner', 'Empfänger Adresszusatz 1', 'Empfänger Adresszusatz 2', 'Empfänger Zustellinformation', 'Empfänger Ansprechpartner', 'Retourenempfänger Adresszusatz 1', 'Retourenempfänger Adresszusatz 2', 'Retourenempfänger Zustellinformation', 'Retourenempfänger Ansprechpartner', 'Service - Wunschnachbar - Details', 'Service - Wunschort - Details', 'Service - Alterssichtprüfung - Altersgrenze', 'Service - Sendungshandling', 'Service - beliebiger Hinweistext', 'Service - Zustelldatum', 'Service - Zustellzeitfenster', 'Service - Vorausverfügung', 'Sendungsdokumente - Einlieferungsstelle', 'Sendungsnummer (Retoure)'] writer = csv.DictWriter(output, delimiter = ";", fieldnames = names) writer.writeheader() for i in d.items(): writer.writerow(< 'Sendungsnummer':d["TRACKINGNR"], 'Empfänger Name 1': d["EMPF_NAME1"], 'Sendungsdatum': d["AUSGANGDATETIME"], 'Absender Name 1': "TS Autoteiel UG", 'Absender Name 2': "(haftungsbeschränkt)", 'Absender Straße': "Scheideweg", 'Absender Hausnummer': "42", 'Absender PLZ': "26121", 'Absender Ort': "Oldenburg", 'Absender Land': "DEU", 'Absender E-Mail-Adresse': "[email protected]", 'Absender Telefonnummer': "0176-72165481", 'Empfänger Name 1': d["EMPF_NAME1"], 'Empfänger Name 2 / Postnummer': d["EMPF_NAME2"], 'Empfänger Name 3': d["EMPF_NAME3"], 'Empfänger Straße': d["EMPF_STRASSE"], 'Empfänger PLZ': d["EMPF_PLZ"], 'Empfänger Ort': d["EMPF_ORT"], 'Empfänger Land': "DEU", 'Produkt- und Servicedetails': "V01PAK", 'Sendungsreferenz': d["REFERENZNR"], 'Abrechnungsnummer': "52052678290101", 'Sendungsnummer': d["TRACKINGNR"]>) 

Отслеживать
149k 12 12 золотых знаков 59 59 серебряных знаков 133 133 бронзовых знака
задан 4 июн 2019 в 16:39
17 4 4 бронзовых знака

Всё логично, вы в каждой итерации цикла создаёте файл заново, стирая старые данные. Вам нужно создать файл один раз за пределами цикла

4 июн 2019 в 16:44
@andreymal а можно чуть-чуть подробней?
4 июн 2019 в 18:41

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Упрощенное решение с использованием модуля Pandas:

import pandas as pd # pip install pandas # __all__ column names in the source CSV file names = ['Sendungsnummer', 'Sendungsdatum', 'Absender Name 1', 'Absender Name 2', 'Absender Name 3', 'Absender Straße', 'Absender Hausnummer', 'Absender PLZ', 'Absender Ort', 'Absender Provinz', 'Absender Land', 'Absenderreferenz', 'Absender E-Mail-Adresse', 'Absender Telefonnummer', 'Empfänger Name 1', 'Empfänger Name 2 / Postnummer', 'Empfänger Name 3', 'Empfänger Straße', 'Empfänger Hausnummer', 'Empfänger PLZ', 'Empfänger Ort', 'Empfänger Provinz', 'Empfänger Land', 'Empfängerreferenz', 'Empfänger E-Mail-Adresse', 'Empfänger Telefonnummer', 'Gewicht', 'Länge', 'Breite', 'Höhe', 'Produkt- und Servicedetails', 'Retourenempfänger Name 1', 'Retourenempfänger Name 2', 'Retourenempfänger Name 3', 'Retourenempfänger Straße', 'Retourenempfänger Hausnummer', 'Sendungsreferenz', 'Retourenempfänger Ort', 'Retourenempfänger Provinz', 'Retourenempfänger Land', 'Retourenrempfänger E-Mail-Adresse', 'Retourenempfänger Telefonnummer', 'Retouren-Abrechnungsnummer', 'Abrechnungsnummer', 'Service - Versandbestätigung - E-Mail Text-Vorlage', 'Service - Versandbestätigung - E-Mail-Adresse', 'Service - Nachnahme - Kontoreferenz', 'Service - Nachnahme - Betrag', 'Service - Nachnahme - IBAN', 'Service - Nachnahme - BIC', 'Service - Nachnahme - Zahlungsempfänger', 'Service - Nachnahme - Bankname', 'Service - Nachnahme - Verwendungszweck 1', 'Service - Nachnahme - Verwendungszweck 2', 'Service - Transportversicherung - Betrag', 'Service - Weltpaket - Vorausverfügungstyp', 'Service - DHL Europaket - Frankaturtyp', 'Sendungsdokumente - Ausfuhranmeldung', 'Sendungsdokumente - Rechnungsnummer', 'Sendungsdokumente - Genehmigungsnummer', 'Sendungsdokumente - Bescheinigungsnummer', 'Sendungsdokumente - Sendungsart', 'Sendungsdokumente - Beschreibung', 'Sendungsdokumente - Entgelte', 'Sendungsdokumente - Gesamtnettogewicht', 'Sendungsdokumente - Beschreibung (WP1)', 'Sendungsdokumente - Menge (WP1)', 'Sendungsdokumente - Zollwert (WP1)', 'Sendungsdokumente - Ursprungsland (WP1)', 'Sendungsdokumente - Zolltarifnummer (WP1)', 'Sendungsdokumente - Gewicht (WP1)', 'Sendungsdokumente - Beschreibung (WP2)', 'Sendungsdokumente - Menge (WP2)', 'Sendungsdokumente - Zollwert (WP2)', 'Sendungsdokumente - Ursprungsland (WP2)', 'Sendungsdokumente - Zolltarifnummer (WP2)', 'Sendungsdokumente - Gewicht (WP2)', 'Sendungsdokumente - Beschreibung (WP3)', 'Sendungsdokumente - Menge (WP3)', 'Sendungsdokumente - Zollwert (WP3)', 'Sendungsdokumente - Ursprungsland (WP3)', 'Sendungsdokumente - Zolltarifnummer (WP3)', 'Sendungsdokumente - Gewicht (WP3)', 'Sendungsdokumente - Beschreibung (WP4)', 'Sendungsdokumente - Menge (WP4)', 'Sendungsdokumente - Zollwert (WP4)', 'Sendungsdokumente - Ursprungsland (WP4)', 'Sendungsdokumente - Zolltarifnummer (WP4)', 'Sendungsdokumente - Gewicht (WP4)', 'Sendungsdokumente - Beschreibung (WP5)', 'Sendungsdokumente - Menge (WP5)', 'Sendungsdokumente - Zollwert (WP5)', 'Sendungsdokumente - Ursprungsland (WP5)', 'Sendungsdokumente - Zolltarifnummer (WP5)', 'Sendungsdokumente - Gewicht (WP5)', 'Sendungsdokumente - Beschreibung (WP6)', 'Sendungsdokumente - Menge (WP6)', 'Sendungsdokumente - Zollwert (WP6)', 'Sendungsdokumente - Ursprungsland (WP6)', 'Sendungsdokumente - Zolltarifnummer (WP6)', 'Sendungsdokumente - Gewicht (WP6)', 'Sendungsnummer', 'Sendungsreferenz (Retoure)', 'Absender Adresszusatz 1', 'Absender Adresszusatz 2', 'Absender Zustellinformation', 'Absender Ansprechpartner', 'Empfänger Adresszusatz 1', 'Empfänger Adresszusatz 2', 'Empfänger Zustellinformation', 'Empfänger Ansprechpartner', 'Retourenempfänger Adresszusatz 1', 'Retourenempfänger Adresszusatz 2', 'Retourenempfänger Zustellinformation', 'Retourenempfänger Ansprechpartner', 'Service - Wunschnachbar - Details', 'Service - Wunschort - Details', 'Service - Alterssichtprüfung - Altersgrenze', 'Service - Sendungshandling', 'Service - beliebiger Hinweistext', 'Service - Zustelldatum', 'Service - Zustellzeitfenster', 'Service - Vorausverfügung', 'Sendungsdokumente - Einlieferungsstelle', 'Sendungsnummer (Retoure)'] # list of __required__ columns cols = ['Sendungsnummer', 'Empfänger Name 1', . 'Abrechnungsnummer'] (pd.read_csv("dhl.csv", sep=";", header=None, names=names, usecols=cols) .to_csv("DHL-VLS-Export.csv", sep=";", index=False)) 

Отслеживать
ответ дан 4 июн 2019 в 16:54
MaxU — stand with Ukraine MaxU — stand with Ukraine
149k 12 12 золотых знаков 59 59 серебряных знаков 133 133 бронзовых знака
Спасибо, попробую как-нибудь с пандой.
4 июн 2019 в 18:42
Я не опробовал ещё этот метод)
4 июн 2019 в 18:47
@Evgeny, ну тогда сначала попробуйте . 😉
4 июн 2019 в 18:48
Уже в процессе.
4 июн 2019 в 18:51

  • python
  • csv
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.4.30.8420

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *