s =['Hello','World','Hello','World']
l = list()
for x,y in enumerate(s):
l.append((y,x))
Я получил вывод [('Hello', 0), ('World', 1), ('Hello', 2), ('World', 3)]
Но я хочу
Hello-[0,2]
World-[1,3]
4 ответа
Вы можете использовать словарь:
d = {}
for i, v in enumerate(s):
if v in d:
d[v].append(i)
else:
d[v] = [i]
d
# {'Hello': [0, 2], 'World': [1, 3]}
Это также можно сделать, используя довольно простое понимание словаря:
>>> s =['Hello','World','Hello','World']
>>> d = {k: [pos for pos, el in enumerate(s) if el == k] for k in set(s)}
>>> d
{'World': [1, 3], 'Hello': [0, 2]}
>>>
Это работает путем создания ключей с использованием каждого элемента уникального в списке s
(что делает set(s)
) и получения индекса каждого из уникальных элементов (что делает понимание списка) ) .
Используйте collections.defaultdict
из списки :
from collections import defaultdict
d = defaultdict(list)
s = ['Hello','World','Hello','World']
for index, key in enumerate(s):
d[key].append(index)
>>> print(d)
defaultdict(<type 'list'>, {'World': [1, 3], 'Hello': [0, 2]})
>>> print(dict(d)) # convert to a std dictionary
{'World': [1, 3], 'Hello': [0, 2]}
Похоже, что collections.defaultdict
идеально подходит для этого case (см. также ответ @mhawke):
from collections import defaultdict
dd = defaultdict(list)
for idx, item in enumerate(s):
dd[item].append(idx)
Затем преобразуйте это в простой словарь снова:
>>> dict(dd)
{'Hello': [0, 2], 'World': [1, 3]}
Недавно я создал пакет, содержащий функцию, которую можно использовать в качестве альтернативы {{ X0 } } :
>>> from iteration_utilities import groupedby
>>> from operator import itemgetter
>>> s =['Hello','World','Hello','World']
>>> groupedby(enumerate(s), key=itemgetter(1), keep=itemgetter(0))
{'Hello': [0, 2], 'World': [1, 3]}
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.