python字典更新方法

python字典更新方法,python,dictionary,variables,Python,Dictionary,Variables,我有一个列表字符串标签 我试图初始化一个字典,用键作为标记字符串,用值作为数组索引 for i, ithTag in enumerate(tag): tagDict.update(ithTag=i) 上面返回我{'ithTag':608}608是第608个索引 我的问题是,当i被解释为变量时,Python将“ithTag”视为字符串而不是变量 我很困惑,用谷歌搜索这些具体问题有点困难。我希望我把这个问题的标题写对了 谢谢 您实际上想这样做: for i, tag in enumerat

我有一个列表字符串标签

我试图初始化一个字典,用键作为标记字符串,用值作为数组索引

for i, ithTag in enumerate(tag):
    tagDict.update(ithTag=i)
上面返回我{'ithTag':608}608是第608个索引

我的问题是,当i被解释为变量时,Python将“ithTag”视为字符串而不是变量

我很困惑,用谷歌搜索这些具体问题有点困难。我希望我把这个问题的标题写对了


谢谢

您实际上想这样做:

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

.update()方法用于使用另一个字典更新字典,而不是更改单个键/值对。

我想这就是您要做的:

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


如果你想变得聪明:

tagDict.update(map(reversed, enumerate(tag)))
感谢Brian的更新。这显然比迭代版本快约5%

(编辑:感谢萨维里奥指出我的答案不正确(现已修复)。最有效/最具吸引力的方式可能是Torsten Marek的答案,稍加修改:

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

这是一条单行线:

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

我想你想要的是:

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

实际上,update()可以直接获取一个序列,因此不需要构造中间dict。执行tagDict.update(枚举(tag))实际上比迭代版本快一点(~5%)。
tagDict
的键必须是
tag
的元素。使用
tagDict.update(map(reversed,enumerate(tag)))
,实际上是Torsten Marek答案的函数等价物。@Claudiu,因为正如saverio已经提到的,
tagDict.update(enumerate(tag))
将索引作为dict键,虽然他们一定很有价值,但我认为这应该是公认的答案——这里发生的事情更清楚,没有副作用可担心。这是一个几乎无法回答的问题。我认为只有选择的答案比你的答案更糟糕。介意改变或解释一下选择for循环答案背后的原因吗?我选择这个答案是因为Jerub首先回答;我马上就做了标记。Jerub同样来自C#/Java背景,我对他的回答更为熟悉,我喜欢他对.update()为什么不适合我的解释。
for i, ithTag in enumerate(tag):
    tagDict.update({ithTag: i})