Как вы можете выполнить итерацию по кортежу (str), а затем вернуть словарь, содержащий ключи (из кортежа) и индекс ключей в качестве значений?

Как вы можете выполнить итерацию по кортежу (str), а затем вернуть словарь, содержащий ключи (из кортежа) и индекс ключей в качестве значений?

Вход:

tup = ('A', 'A', 'B', 'B', 'A')

Вернуть словарь, который выглядит следующим образом:

{'A': [0, 1, 4], 'B': [2, 3]}
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
44
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Используйте defaultdict:

tup = ('A', 'A', 'B', 'B', 'A')

from collections import defaultdict

d = defaultdict(list)
for i,k in enumerate(tup):
    d[k].append(i)
    
dict(d)

или с классическим словарем:

d = {}
for i,k in enumerate(tup):
    if k in d:
        d[k].append(i)
    else:
        d[k] = [i]

вывод: {'A': [0, 1, 4], 'B': [2, 3]}

Вы также можете использовать dict.setdefault, хотя я нахожу это не очень явным, если вы не знакомы с методом setdefault:

d = {}
for i,k in enumerate(tup):
    d.setdefault(k, []).append(i)

Ваш второй пример очень ясен с точки зрения того, что вы делаете. Однако разве это не хороший случай для setdefault?

Lancelot du Lac 03.04.2022 21:24

@LancelotduLac, вы могли бы сделать что-то вроде for i,k in enumerate(tup): d.setdefault(k, []).append(i), но я нахожу это немного загадочным для чтения. я добавил комментарий

mozway 03.04.2022 21:30

Вот несколько мысли о setdefault против defaultdict

mozway 03.04.2022 21:36

Простым подходом было бы присвоить пустой список каждому уникальному элементу в кортеже. Затем добавьте индекс каждого элемента в соответствующий список.

Вот мой код: -

Создание пустого словаря.

tup = ('A', 'A', 'B', 'B', 'A')
d = {}

Присвоение пустого списка в словаре каждому уникальному элементу кортежа.

for i in range(len(tup)):
    d[tup[i]] = []

Добавление индекса каждого элемента кортежа в его соответствующий список в словаре

for j in range(len(tup)):
    d[tup[j]].append(j)

Полный код: -

tup = ('A', 'A', 'B', 'B', 'A')
d = {}
for i in range(len(tup)):
    d[tup[i]] = []
for j in range(len(tup)):
    d[tup[j]].append(j)
print(d)

Взгляните на мой ответ, вы можете выполнить оба действия в одном цикле.

mozway 03.04.2022 21:18

Другие вопросы по теме