Метод обновления словаря Python

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

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

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

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

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

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

Спасибо!

Это вопрос, почти вызывающий одобрение. Думаю, хуже Вот этот только выбранный ответ. Не хотите изменить или объяснить причины выбора ответа цикла for?

erikbwork 17.12.2013 16:31

Я выбрал его, потому что первым ответил Джеруб; и я сразу отметила это. Также из опыта работы с C# / Java ответ Джеруба кажется мне более знакомым, и мне понравилось его объяснение, почему .update () не сработал для меня.

freshWoWer 04.01.2014 04:05
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
18
2
46 497
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

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

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

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

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

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

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

Пытаться

tagDict[ithTag] = i

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

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

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

(Обновлено: Спасибо, saverio за указание, что мой ответ был неправильным (теперь исправлен). Вероятно, наиболее эффективным / питоническим способом был бы ответ Торстена Марека, слегка измененный:

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

)

На самом деле update () может принимать последовательность напрямую, поэтому создавать промежуточный dict нет необходимости. Выполнение tagDict.update (enumerate (tag)) на самом деле немного (~ 5%) быстрее, чем итеративная версия.

Brian 06.10.2008 12:34

Клавиши tagDict должны быть элементами tag. Используйте tagDict.update(map(reversed, enumerate(tag))), фактически функциональный эквивалент ответа Торстена Марека.

rewritten 11.02.2011 18:39

@Claudiu, потому что, как уже упоминалось saverio, tagDict.update(enumerate(tag)) делает индексы как ключи dict, в то время как они должны быть значениями

warvariuc 15.12.2011 20:46

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

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

Я думаю, что это должен быть принятый ответ - здесь более ясно, что происходит, нет побочных эффектов, о которых нужно беспокоиться.

Hamish Grubijan 21.11.2012 01:19

Я думаю, что вам нужно следующее:

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

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