Как добавить несколько значений для ключа в словаре в Python? - PullRequest
0 голосов
/ 12 декабря 2018
M = int(input())
mydict = {}
for i in range (M):
    j,k = map(int, input().split())
    try:
        mydict[j].append(k)
    except KeyError :
        mydict[j] = k
print(mydict)

Когда я запускаю код:

Traceback (most recent call last):
  File "source_file.py", line 7, in <module>
    mydict[j].append(k)
AttributeError: 'int' object has no attribute 'append'

1 Ответ

0 голосов
/ 12 декабря 2018

Проблема, с которой вы сталкиваетесь, состоит в том, что значение ключа инициализируется как int (k) вместо list ([k]).Когда вы пытаетесь позвонить .append на int, вы получаете AttributeError.

Питонный способ инициализации ключа значением по умолчанию состоит в том, чтобы использовать либо dict.setdefault, либо defaultdict, чтобы ваш тип значения инициализировался как список при добавлении нового ключа.

Использование defaultdict с default_factory=list автоматически создает новый список при каждом добавлении ключа в dict:

from collections import defaultdict

M = int(input())
mydict = defaultdict(list)    # passing list as the default type

for i in range (M):
    j,k = map(int, input().split())
    mydict[j].append(k)
print(mydict)

В качестве альтернативы, вы можете использовать dict.setdefault:

M = int(input())
mydict = {}

for i in range (M):
    j,k = map(int, input().split())
    mydict.setdefault(j, []).append(k)   # using setdefault to initialise as a list
print(mydict)

Наконец, если вы все еще предпочитаете использовать блок except, измените строку 8 в оригинале на mydict[j] = [k]

edit: typo

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