Python: Как добавить элемент списка в словарь, если элемент равен ключу? - PullRequest
1 голос
/ 10 апреля 2020

Я пытаюсь перебрать список и, если элемент списка равен ключу словаря, добавить элемент списка в словарь.

mylist = [1, 2, 3]

mydict = dict.fromkeys(mylist, [])

for item in mylist:
    for key in mydict:
        if key == item:
            mydict[key].append(item)

print(mydict)

Вывод:

{1: [1, 2, 3], 2: [1, 2, 3], 3: [1, 2, 3]}

Требуемый выход:

{1: [1], 2: [2], 3: [3]}

Большое спасибо!

Ответы [ 4 ]

2 голосов
/ 10 апреля 2020

Это потому что здесь:

mydict = dict.fromkeys(mylist, [])

mydict значения будут тот же объект [], поэтому, когда вы добавите mydict[something], вы будете добавляя к тот же список , независимо от того, что something.

Все значения являются одним и тем же объектом, вы добавляете к нему три числа => все значения отображаются как один и тот же список.

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

mydict = {}
for item in mylist:
    mydict.setdefault(item, []).append(item)

Или, вы знаете:

mydict = {key: [key] for key in mylist}
1 голос
/ 10 апреля 2020

с помощью:

mylist = [1, 2, 3]

mydict = dict.fromkeys(mylist, [])

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

mydict = dict.fromkeys(mylist)

for item in mylist:
    mydict[item] = [item]

print(mydict)

вывод:

{1: [1], 2: [2], 3: [3]}

то же самое, но в более эффективной и компактной форме с использованием словарного понимания:

mydict = {item: [item] for item in mylist}
0 голосов
/ 10 апреля 2020
mylist = [1, 2, 3]

mydict = dict.fromkeys(mylist, [])

for item in mylist:
    for key in mydict:
        if key == item:
            mydict[key] = [item]

print(mydict)
0 голосов
/ 10 апреля 2020

Это то, что вы хотели?

mylist = [1,2,3,3]
mydict = {}
for item in mylist:
    if item not in mydict:
        mydict[item] = [item]
    else:
        mydict[item].append(item)
print(mydict)

Будет выведено: {1: [1], 2: [2], 3: [3, 3]}

...