我有一个列表字符串标记。python字典更新方法
我想初始化一个字典,把键作为标记字符串和值作为数组索引。
for i, ithTag in enumerate(tag):
tagDict.update(ithTag=i)
上述返回箱{“ithTag”:608} 608是第608次索引
我的问题是,虽然i被解释为一个变量,Python是治疗“ithTag”作为一个字符串而不是一个变量。
我很困惑,这种类型的具体问题很难。我希望我正确地回答了这个问题的标题,
谢谢!
我有一个列表字符串标记。python字典更新方法
我想初始化一个字典,把键作为标记字符串和值作为数组索引。
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[ithTag] = i
如果你要聪明一点:
tagDict.update(map(reversed, enumerate(tag)))
感谢Brian进行更新。这显然比迭代版本快5%。
(编辑:您指出我的答案是不正确的(现已修复)可能是最有效的/ Python的方式将托斯滕马立克氏回答感谢萨维里奥,略作修改:
tagDict.update((t, i) for (i,t) in enumerate(tag))
)
实际上,update()可以直接使用一个序列,因此不需要构造中间字典。做tagDict.update(枚举(标签))实际上比迭代版本稍快(〜5%)。 – Brian 2008-10-06 08:34:49
这是一个班轮:
tagDict = dict((t, i) for i, t in enumerate(tag))
我想你想要的是这样的:
for i, ithTag in enumerate(tag):
tagDict.update({ithTag: i})
这是一个几乎可以解决的问题。我认为只有选择的答案比[这一个]更糟糕(http://stackoverflow.com/a/179005/131120)。想要改变或解释选择for-loop答案背后的原因吗? – erikbwork 2013-12-17 12:31:27
我选择了那个,因为杰罗布先回答了;我只是马上标记出来。同样来自C#/ Java背景,Jerub的答案看起来更加熟悉,我喜欢他解释为什么.update()不适合我。 – freshWoWer 2014-01-04 00:05:20