Самый быстрый способ создать словарь из двух списков - PullRequest
0 голосов
/ 26 августа 2018

У меня есть два списка. Например:

keys = [1, 2, 3, 2, 4, 2, 1]

и

values = [1, 2, 3, 4, 5, 6, 7]

Я хочу создать словарь списков из них, как показано ниже:

dict = {1: [1, 7], 2: [2, 4, 6], 3: [3], 4: [5]} 

Какой самый быстрый способ сделать это и что дает повышение эффективности, как при использовании любого модуля, так и без импорта какого-либо дополнительного модуля?

Ответы [ 3 ]

0 голосов
/ 26 августа 2018

Вы можете использовать следующее:

d = {}
for k, v in zip(keys, values):
    d.setdefault(k, []).append(v)
print(d)

который выводит:

{1: [1, 7], 2: [2, 4, 6], 3: [3], 4: [5]}
0 голосов
/ 26 августа 2018

Вы можете использовать defaultdict для вашего случая.Если какой-либо ключ не существует, по умолчанию dict вызывает метод фабрики (list() для текущего случая) и вместо вызова KeyError возвращает новый пустой список, к которому добавляется значение:

from collections import defaultdict

ld = defaultdict(list)

for k,v in zip(keys, values):
    ld[k].append(v)

print(ld)
0 голосов
/ 26 августа 2018

Использование collections.defaultdict

from collections import defaultdict
d_dict = defaultdict(list)
for k,v in zip(keys, values):
    d_dict[k].append(v)

dict(d_dict)
#{1: [1, 7], 2: [2, 4, 6], 3: [3], 4: [5]}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...