У меня есть список животных
animals = ["B_FOX", "A_CAT", "A_DOG", "A_MOUSE",
"B_DOG", "B_MOUSE", "C_DUCK", "C_FOX", "C_BIRD"]
И хотел бы следующие результаты:
A = ["A_CAT", "A_DOG", "A_MOUSE"]
B = ["B_DOG", "B_MOUSE", "B_FOX"]
C = ["C_DUCK", "C_FOX", "C_BIRD"]
Я могу получить только подмножество списка только букв или животных, как это:
[species.split("_",1)[1] for species in animals]
['FOX', 'CAT', 'DOG', 'MOUSE', 'DOG', 'MOUSE', 'DUCK', 'FOX', 'BIRD']
[letters.split("_",1)[0] for letters in animals]
['B', 'A', 'A', 'A', 'B', 'B', 'C', 'C', 'C']
Не уверен, правильно ли я сформулировал вопрос. Любая помощь в решении этой сложной проблемы будет принята с благодарностью!
3 ответа
Вы можете распаковать значения префикса и имени из одного вызова split
:
groups = {}
for animal in animals:
prefix, name = animal.split("_")
if prefix not in groups:
groups[prefix] = []
groups[prefix].append(animal)
print groups
{'A': ['A_CAT', 'A_DOG', 'A_MOUSE'], 'C': ['C_DUCK', 'C_FOX', 'C_BIRD'], 'B': ['B_FOX', 'B_DOG', ' B_MOUSE '] }
При необходимости вы можете позже распаковать dict в отдельные переменные:
A = groups["A"]
B = groups["B"]
C = groups["C"]
Если вы хотите избавиться от префиксов:
groups = {}
for animal in animals:
prefix, name = animal.split("_")
if prefix not in groups:
groups[prefix] = []
groups[prefix].append(name)
Попробуйте itertools.groupby
в соответствии с первой буквой:
import operator as op
import itertools as it
animals = [
"B_FOX", "A_CAT", "A_DOG", "A_MOUSE",
"B_DOG", "B_MOUSE", "C_DUCK", "C_FOX", "C_BIRD"
]
A, B, C = [list(g) for _, g in it.groupby(sorted(animals), key=op.itemgetter(0))]
Выходы:
A
# ['A_CAT', 'A_DOG', 'A_MOUSE']
B
# ['B_DOG', 'B_FOX', 'B_MOUSE']
C
# ['C_BIRD', 'C_DUCK', 'C_FOX']
Вот сообщение о том, как groupby
работает.
Вы можете создать отдельные списки, по одному на каждую начальную букву, однако это будет сложно, если у вас много букв. Вместо этого вы можете использовать defaultdict
:
from collections import defaultdict
d = defaultdict(list)
animals = ["B_FOX", "A_CAT", "A_DOG", "A_MOUSE",
"B_DOG", "B_MOUSE", "C_DUCK", "C_FOX", "C_BIRD"]
for animal in animals:
d[animal[0]].append(animal)
print(dict(d))
Выход:
{'A': ['A_CAT', 'A_DOG', 'A_MOUSE'], 'C': ['C_DUCK', 'C_FOX', 'C_BIRD'], 'B': ['B_FOX', 'B_DOG', 'B_MOUSE']}
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.