метод обновления словаря Python - PullRequest
18 голосов
/ 06 октября 2008

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

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

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

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

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

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

Спасибо!

Ответы [ 6 ]

46 голосов
/ 06 октября 2008

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

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

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

17 голосов
/ 06 октября 2008

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

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

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

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

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

)

12 голосов
/ 07 октября 2008

Это однострочник:

tagDict = dict((t, i) for i, t in enumerate(tag))
2 голосов
/ 13 ноября 2012

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

for i, ithTag in enumerate(tag):
    tagDict.update({ithTag: i})
2 голосов
/ 06 октября 2008

Попробуйте

tagDict[ithTag] = i
2 голосов
/ 06 октября 2008

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

d = {}
for i, tag in enumerate(ithTag):
   d[tag] = i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...