Ошибка KeyError, но такой ключ есть в словаре

Dakin

Новичок
Пользователь
Окт 6, 2020
2
1
3
Я запрашиваю с сайта информацию, и после этого всю запрошенную информацию добавляю в словарь. Если вывожу весь словарь - такой ключ точно присутствует:

AllDict.PNG
но при попытке вывести только 1 ответ, соответствующий нужному мне ключу вылазит ошибка KeyError:
KeyError.PNG
Вот мой код:

Python:
from urllib.request import urlopen
import xml.etree.ElementTree as ET
from collections import defaultdict

tree = ET.parse(urlopen('https://www.resources-game.ch/exchange/kurseliste.xml'))
root = tree.getroot()

for item in root.findall('ITEM'):
    item_id = item.find('ITEM_ID').text
    smkurs = item.find('SMKURS').text
    normkurs = item.find('NORMKURS').text

    dictPrice={}

    saveDictPrice={item_id:normkurs}
    dictPrice[item_id] = smkurs


    print(dictPrice['2'])
 

Student

throw exception
Команда форума
Администратор
Апр 2, 2020
195
103
43
Москва
Разве создание словаря dictPrice не нужно инициализировать ДО выполнения цикла for ?
В таком виде каждая итерация цикла создаст новый пустой словарь.

Python:
dictPrice = {}
for item in root.findall('ITEM'):
    ...
 

Student

throw exception
Команда форума
Администратор
Апр 2, 2020
195
103
43
Москва
И еще на сайте может не быть запись с ID 2, тогда да, будет ошибка. Вы можете создать список и уже в него ввести все данные.

Python:
data = []
for item in root.findall('ITEM'):
    ...
    data.append({
        'id': item_id,
        'smkurs': smkurs
        'normkurs': normkurs
    })
 

Dakin

Новичок
Пользователь
Окт 6, 2020
2
1
3
Разве создание словаря dictPrice не нужно инициализировать ДО выполнения цикла for ?
В таком виде каждая итерация цикла создаст новый пустой словарь.

Python:
dictPrice = {}
for item in root.findall('ITEM'):
    ...
Спасибо большое, я 3 день пытался с этим разобраться, но не мог понять в чем проблема, вижу что оно вроде создает каждый раз новый словарь, а из-за чего такое происходит понять не мог
 
  • Мне нравится
Реакции: Student

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 599
464
83
Python:
from urllib.request import urlopen
import xml.etree.ElementTree as ET
from collections import defaultdict

tree = ET.parse(urlopen('https://www.resources-game.ch/exchange/kurseliste.xml'))
root = tree.getroot()
dictPrice={}

for item in root.findall('ITEM'):
    item_id = item.find('ITEM_ID').text
    smkurs = item.find('SMKURS').text
    normkurs = item.find('NORMKURS').text

    saveDictPrice={item_id:normkurs}
    dictPrice[item_id] = smkurs

print(dictPrice.get('2'))
 

Форум IT Специалистов