вопрос про zip() и совмещение двух списков в один словарь
У меня есть списки:
a = ['a', 'b', 'c', 'a']
b = [1, 2, 3, 3]
когда я применяю:
с = dict(zip(a, b))
то на выходе получается что-то вроде:
{'a': 3, 'b': 2, 'c': 3}
то есть исключается дублирование ключей, но как мне сделать, чтобы в таком случае 'a' была бы на последней позиции в словаре, как тут?
{'b': 2, 'c': 3, 'a': 3}
то есть там, где и последнее совпадение
Ответы (2 шт):
Автор решения: FotonPC
→ Ссылка
Вот небольшой код:
a = ['a', 'b', 'c', 'a']
b = [1, 2, 3, 3]
count_dict = {}
for el in a:
count_dict[el] = a.count(el)
for el in count_dict.keys():
for i in range(count_dict[el]-1):
ind = a.index(el)
b.pop(ind)
a.pop(ind)
с = dict(zip(a, b))
print(c)
Выведет:
{'b': 2, 'c': 3, 'a': 3}
У меня работает, так как python3.8
Ориентироваться на позиции в словарях — не очень хорошая идея, так как некоторые версии Python не гарантируют какой-либо конкретный порядок – andreymal
Автор решения: CrazyElf
→ Ссылка
Ну, если вручную удалять имеющийся ключ и потом только добавлять, то вроде получается:
a = ['a', 'b', 'c', 'a']
b = [1, 2, 3, 3]
c = dict()
for k,v in zip(a, b):
if k in c:
del c[k]
c[k] = v
print(c)
Вывод:
{'b': 2, 'c': 3, 'a': 3}
Google Colab, Python 3.6.9