更新dict over iteration后dict只保留最后一次迭代对。
示例:
# DICTIONARY PROBLEM
class Dict_ator(object):
def __init__(self, str, int):
self.string = str
self.integer = int
boogeyman = []
i = 1
for char in "boogeyman" :
boogeyman.append( Dict_ator(char, i) )
i += 1
dictonary = {}
for b in boogeyman :
dictonary.update( s = b.string, i = b.integer )
我做错了什么?
答案 0 :(得分:2)
您反复设置相同的键:
dictonary.update( s = b.string, i = b.integer )
通过使用关键字,您将设置两个键; s
和i
;字典的定义是它们将键映射到值,其中键是唯一的。
如果要为循环中的每个元素设置不同的键值组合,请设置不同的键。例如,对每个键使用b.string
,为值使用b.integer
,将它们作为元组传递:
dictonary.update((b.string, b.integer))
或直接使用赋值设置键值:
dictonary[b.string] = b.integer
用dict理解替换整个循环:
dictionary = {b.string: b.integer for b in boogeyman}
您的第一个循环可以使用enumerate()
进行简化,起始值为1
,并且列表理解为:
boogeyman = [Dict_ator(char, i)) for i, char in enumerate("boogeyman", 1)]
如果您不需要Dict_ator
个对象,则可以使用相同的enumerate()
循环来构建字典:
dictionary = {char: i for i, char in enumerate('boogeyman', 1)}
如果您希望字典以另一种方式映射,则交换整数和字符组件。
答案 1 :(得分:1)
一行可以解决您的问题:
>>> {i: c for i, c in enumerate("boogeyman", 1)}
{1: 'b', 2: 'o', 3: 'o', 4: 'g', 5: 'e', 6: 'y', 7: 'm', 8: 'a', 9: 'n'}
答案 2 :(得分:1)
这有效
class Dict_ator(object):
def __init__(self, str, int):
self.string = str
self.integer = int
boogeyman = []
i = 1
for char in "boogeyman" :
boogeyman.append( Dict_ator(char, i) )
i += 1
dictonary = {}
for b in boogeyman :
dictonary[b.string] = b.integer
你的Dict_ator
...仅用于存储一个角色和相关位置......似乎太多了。另外,为什么你不能直接添加到dict,比如
dictonary = {}
i = 1
for char in "boogeyman" :
dictonary[char] = i
简单,呃?