вопрос про 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

→ Ссылка