Python 字典更新方法

python dictionary update method

提问人:freshWoWer 提问时间:10/6/2008 最后编辑:Serafina BrociousfreshWoWer 更新时间:11/13/2012 访问量:47403

问:

我有一个列表字符串标签。

我正在尝试初始化一个字典,将键作为标签字符串,将值作为数组索引。

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

上面返回我 {'ithTag': 608} 608 是第 608 个索引

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

我很困惑,很难在谷歌上搜索这些具体问题。我希望我正确地表达了这个问题的标题,

谢谢!

Python 字典 变量

评论

0赞 erikbstack 12/17/2013
这是一个几乎可以接受的问题。我认为只有选择的答案比这个更糟糕。介意改变或解释选择for循环答案背后的原因吗?
0赞 freshWoWer 1/4/2014
我之所以选择那个,是因为耶鲁布先回答;我马上就标记了它。同样来自 C#/Java 背景,Jerub 的回答对我来说看起来更熟悉,我喜欢他对为什么 .update() 对我不起作用的解释。

答:

46赞 Jerub 10/6/2008 #1

您实际上想这样做:

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

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

2赞 mbesso 10/6/2008 #2

我认为这是你想做的:

d = {}
for i, tag in enumerate(ithTag):
   d[tag] = i
2赞 Vinko Vrsalovic 10/6/2008 #3

尝试

tagDict[ithTag] = i
18赞 Claudiu 10/6/2008 #4

如果你想变得聪明:

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

感谢 Brian 的更新。这显然比迭代版本快 ~5%。

(编辑:感谢 saverio 指出我的答案不正确(现已修复)。可能最有效/Pythonic 的方式是 Torsten Marek 的回答,稍作修改:

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

)

评论

1赞 Brian 10/6/2008
实际上,update() 可以直接接受序列,因此无需构造中间字典。 执行 tagDict.update(enumerate(tag)) 实际上比迭代版本略快 (~5%)。
2赞 rewritten 2/11/2011
的键必须是 的元素。使用,实际上是 Torsten Marek 的答案的功能等价物。tagDicttagtagDict.update(map(reversed, enumerate(tag)))
0赞 warvariuc 12/16/2011
@Claudiu,因为正如 saverio 已经提到的,将索引作为字典键,而它们必须是值tagDict.update(enumerate(tag))
12赞 Torsten Marek 10/7/2008 #5

这是一句话:

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

评论

0赞 Hamish Grubijan 11/21/2012
我认为这应该是公认的答案——这里发生的事情更清楚,无需担心副作用。
2赞 Vanuan 11/13/2012 #6

我想你想要的是这个:

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