Python - ошибка при объединении списков с повторяющимися значениями в словарь - PullRequest
0 голосов
/ 30 января 2020

Когда в моих первых списках есть повторяющиеся значения, слияние по какой-то причине вызывает сбой.

names = ['bob', 'bob', 'bob', 'bob']
id = ['15', '12', '19', '20']
rating = ['100', '90', '100', '80']

dictionary = dict(zip(names, zip(id, rating)))

print(dictionary)

будет выводить

{'bob': ('20', '80')}

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

names = ['bob', 'sally', 'john', 'jill']
id = ['15', '12', '19', '20']
rating = ['100', '90', '100', '80']

dictionary = dict(zip(names, zip(id, rating)))

print(dictionary)

тот же код с уникальными именами теперь выводит

{'bob': ('15', '100'), 'john': ('19', '100'), 'sally': ('12', '90'), 'jill': ('20', '80')}

Что я могу сделать лучше, чем "dict (zip (names, zip ( id, rating))) "так я могу повторять" боб "столько, сколько хочу?

Ответы [ 2 ]

0 голосов
/ 30 января 2020

вы можете попробовать это:

a={}
b=[]
for n,i,r in zip(names,id,rating):
  a[n] = (i,r)
  b.append(a)

Это вернет вам список вывода словаря:

[{'bob': ('20', '80')},
 {'bob': ('20', '80')},
 {'bob': ('20', '80')},
 {'bob': ('20', '80')}]
0 голосов
/ 30 января 2020

Ну, к сожалению, вы не можете использовать один и тот же ключ для разных значений в словаре; это будет означать, что каждый ключ будет иметь различное значение, что нарушит основную идею. Вместо этого, если бы у вас были повторяющиеся клавиши, я бы изменил имя в соответствии с его положением в исходном списке.

names = ['bob', 'bob', 'bob', 'bob']
id = ['15', '12', '19', '20']
rating = ['100', '90', '100', '80']

new_dict = {}
for i in range(len(names)):
    new_dict[f'{names[i]} #{i}'] = (id[i], rating[i])

Вы получите диктант, состоящий из имен в names и их относительные позиции. Это приведет к ошибке ListIndex, если у вас id или rating меньше names.

...