Я вижу, что есть три Eli
с, поэтому обычно это выглядит так:
output = {}
for name in votes:
output.setdefault(name, [])
output[name].append(name)
print(output)
Вывод:
{'johny': ['johny'],
'Eli': ['Eli', 'Eli', 'Eli'],
'Jane': ['Jane'],
'Ally': ['Ally'],
'Johny': ['Johny'],
'john': ['john']}
Или,
import copy
output = copy.deepcopy(mydictionary)
for name in votes:
output[name].append(name)
print(output):
вывод:
{'johny': ['johny'],
'Eli': ['Eli', 'Eli', 'Eli'],
'Johny': ['Johny'],
'Jane': ['Jane'],
'john': ['john'],
'Ally': ['Ally']}
Теперь, если вы хотите ограничить до двух, даже если есть три элемента:
output = {}
for name in votes:
# to maintain the order, you can iterate over `mydictionary`
output[name] = [name]*min(2, votes.count(name))
print(output)
вывод:
{'johny': ['johny'],
'Eli': ['Eli', 'Eli'],
'Jane': ['Jane'],
'Ally': ['Ally'],
'Johny': ['Johny'],
'john': ['john']}
Другой Интересный способ добиться двух вхождений Eli
будет, itertools.groupby
:
>>> from itertools import groupby
>>> {key: [*group] for key, group in groupby(reversed(votes))}
{'Eli': ['Eli', 'Eli'],
'john': ['john'],
'Johny': ['Johny'],
'Ally': ['Ally'],
'Jane': ['Jane'],
'johny': ['johny']}