Хотя я видел версии моей проблемы, в соответствии с которой словарь был создан из двух списков (один список с ключами, а другой с соответствующими значениями), я хочу создать словарь из списка (содержащий ключи) и списков. списка »(содержащий соответствующие значения).

Пример моего кода:

#-Creating python dictionary from a list and lists of lists:
keys = [18, 34, 30, 30, 18]
values = [[7,8,9],[4,5,6],[1,2,3],[10,11,12],[13,14,15]]
print "This is example dictionary: "
print dictionary

Я ожидаю получить следующий результат:

{18:[7,8,9],34:[4,5,6],30:[1,2,3],30:[10,11,12],18:[13,14,15]}

Мне не нужно, чтобы повторные ключи (30, 18) были в паре с их соответствующими значениями.

Вместо этого я продолжаю получать следующий результат:

{18: [13, 14, 15], 34: [4, 5, 6], 30: [10, 11, 12]}

В этом результате отсутствуют два элемента из моего ожидаемого списка.

Я надеюсь получить некоторую помощь от этого форума.

3
Vondoe79 14 Мар 2018 в 03:31

2 ответа

Лучший ответ

Как уже упоминалось, желаемый вывод невозможен, поскольку словарные ключи должны быть уникальными.

Ниже приведены 2 варианта, если вы не хотите потерять данные.

Список кортежей

res = [(i, j) for i, j in zip(keys, values)]

# [(18, [7, 8, 9]),
#  (34, [4, 5, 6]),
#  (30, [1, 2, 3]),
#  (30, [10, 11, 12]),
#  (18, [13, 14, 15])]

Словарь списков

from collections import defaultdict

res = defaultdict(list)

for i, j in zip(keys, values):
    res[i].append(j)

# defaultdict(list,
#             {18: [[7, 8, 9], [13, 14, 15]],
#              30: [[1, 2, 3], [10, 11, 12]],
#              34: [[4, 5, 6]]})
2
jpp 14 Мар 2018 в 07:31
Keys need to be unique. 
You Have keys = [18, 34, 30, 30, 18]
Repeated keys 18 and 30 can not be used twice.
Try your script with unique keys and it works fine.
Keys read right to left. Notice you get the first key 18 
and the first key 30, but the second of each key is passed over 
0
JackNorthrup 14 Мар 2018 в 07:13