Нахождение словаря номер x в списке словарей - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь найти определенный словарь в списке словарей, используя цикл. Однако я получаю сообщение об ошибке: KeyError: 1

def EU():
    wrong = 0
    correct = 0
    for country in eu:
        ans = input("what is the capital of " + country[0][1] + ": ")
        str.lower(ans)
        if ans == country[1][1]:
            print("CORRECT")
            correct = correct + 1
        else:
            print("WRONG. It is: " + country[1][1])
            wrong = wrong + 1

    print("Correct: " + str(correct))
    print("wrong: " + str(wrong))
    print("You got " + str(correct) + " out of 25")

#finding the data from a .csv file

nl = {'newline': ''}
mode = 'r'
if sys.version_info < (3, 0):
    nl.pop('newline', None)
    mode = 'rb'
with open('Europe_Capitals.csv', mode, **nl) as fp:
    reader = csv.reader(fp, delimiter=',', quotechar='"')
    # next(reader, None)  # skip the headers
    dr = [row for row in reader]

europe = []

for y in range(0, 51):
    a = {
            "Country" : dr[y][0],
            "Capital" : dr[y][1]
        },
    #print(a)
    if y == 51:
        a = {
            "Country" : dr[y][0],
            "Capital" : dr[y][1]
            }
    europe.append(a)

Программа предназначена для циклического перемещения по столицам Европы и спрашивает их, но вместо этого я получил «что такое столица страны»,и теперь я просто получаю сообщение об ошибке KeyError: 1

1 Ответ

1 голос
/ 18 октября 2019

Этот раздел

a = {
        "Country" : dr[y][0],
        "Capital" : dr[y][1]
     },    # <-- note the comma

создает кортеж (dict, None)

, поэтому, когда у вас есть

for country in eu:
   ...

country, эта же форма является кортежем,поэтому country[0] дает вам словарь, но у него нет ключа 1, поэтому он выдает ошибку ключа

, вам следует избавиться от запятой в конце создания a (выше).

Затем, чтобы получить название страны, вы должны использовать country["Country"], а для прописного - country["Capital"]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...