Python字典没有更新

时间:2013-06-01 20:02:15

标签: python python-2.7 dictionary

更新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 )

我做错了什么?

3 个答案:

答案 0 :(得分:2)

您反复设置相同的键:

dictonary.update( s = b.string, i = b.integer )

通过使用关键字,您将设置两个键; si;字典的定义是它们将键映射到值,其中键是唯一的。

如果要为循环中的每个元素设置不同的键值组合,请设置不同的键。例如,对每个键使用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 
简单,呃?