метод обновления словаря Python
-
05-07-2019 - |
Вопрос
У меня есть тег строки списка.
Я пытаюсь инициализировать словарь, используя ключ в качестве строки тега и значения в качестве индекса массива.
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})