Вопрос

У меня есть тег строки списка.

Я пытаюсь инициализировать словарь, используя ключ в качестве строки тега и значения в качестве индекса массива.

for i, ithTag in enumerate(tag):
    tagDict.update(ithTag=i)

Вышеупомянутое возвращает мне {'ithTag':608} 608 — 608-й индекс.

Моя проблема в том, что хотя i интерпретируется как переменная, Python рассматривает «ithTag» как строку, а не как переменную.

Я в замешательстве, сложно найти в Google такие конкретные вопросы.Надеюсь, я правильно сформулировал заголовок этого вопроса,

Спасибо!

Это было полезно?

Решение

Вы действительно хотите сделать это:

for i, tag in enumerate(tag):
    tagDict[tag] = i

Метод .update() используется для обновления словаря с использованием другого словаря, а не для изменения одной пары ключ/значение.

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

Если хочешь быть умным:

tagDict.update(map(reversed, enumerate(tag)))

Спасибо Брайану за обновление.Очевидно, это примерно на 5% быстрее, чем итеративная версия.

(РЕДАКТИРОВАТЬ:Спасибо Саверио за то, что указали, что мой ответ был неправильным (теперь исправлено).Вероятно, наиболее эффективным/питоническим способом будет слегка измененный ответ Торстена Марека:

tagDict.update((t, i) for (i,t) in enumerate(tag))

)

Это однострочный текст:

tagDict = dict((t, i) for i, t in enumerate(tag))

Я думаю, это то, что вы хотите сделать:

d = {}
for i, tag in enumerate(ithTag):
   d[tag] = i

Пытаться

tagDict[ithTag] = i

Я думаю, что вы хотите, это:

for i, ithTag in enumerate(tag):
    tagDict.update({ithTag: i})
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top