Как я могу создать словарь без различия и только с использованием встроенных функций Python (из двух списков)? - PullRequest
0 голосов
/ 27 октября 2018

У меня есть два списка. Оба размера 1013x1. Они похожи на ниже;

l1=["Volkswagen","Toyota","Toyota","Peugeot",..,"Volkswagen","Ford","Toyota","Volvo","Volkswagen"]

l2=[739,403,347,336,310,308,...,302,302,386,370,324]

Я пытаюсь создать словарь с ними. l1 должен быть ключевым и l2 должен быть значением. Код здесь:

d = dict(zip(l1, l2))

и d выглядит как

 {'"Audi"': 122, '"BMW"': 141, '"Citroen"': 129, '"Ford"': 203, '"Honda"': 121, '"Hyundai"': 112, '"Kia"': 196, '"Mazda"': 250, '"Mercedes-Benz"': 151, '"Mitsubishi"': 145, '"Nissan"': 131, '"Opel"': 110, '"Peugeot"': 143, '"Skoda"': 510, '"Subaru"': 80, '"Suzuki"': 132, '"Tesla"': 553,'"Toyota"': 102, '"Volkswagen"': 461, '"Volvo"': 416}

Почему размер d 20? Насколько я понимаю, это отличается от l1 . Как создать словарь без различия, используя только встроенные функции Python?

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Ваш словарь имеет размер 20, потому что у вас есть дубликаты ключей в l1.Только последние данные value каждой key «жизни» перезаписываются другими.Вы можете добавить все values к key, если вы храните list of values вместо value, сохраненного этим key.

В качестве альтернативы простому диктату вы можете использовать defaultdict из collections модуля :

from collections import defaultdict

l1=["Volkswagen","Toyota","Toyota","Peugeot","Volkswagen","Ford","Toyota","Volvo","Volkswagen"]
l2=[739,403,347,336,310,308, 302,302,386]
k = defaultdict(list)

for key,value in zip(l1,l2):
    k[key].append(value)

print(k)

Вывод:

defaultdict(<class 'list'>, 
{'Volkswagen': [739, 310, 386], 'Toyota': [403, 347, 302], 
 'Peugeot': [336], 'Ford': [308], 'Volvo': [302]})

Это возможно только в том случае, если вы рассматриваете импорт базовых модулей как "Python build"в функции ".

0 голосов
/ 27 октября 2018

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

d = dict()
for key, val in zip(l1, l2):
    if key in d:
        d[key].append(val)
    else:
        d[key] = [val]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...