-2

在迭代字典上更新字典后,只保留最后一个迭代对。

样本:

# 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 )

我做错了什么?

4

3 回答 3

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)}

如果您希望字典以另一种方式映射,请交换整数和字符组件。

于 2013-06-01T20:08:11.377 回答
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'}
于 2013-06-01T20:12:50.667 回答
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 

简单,嗯?

于 2013-06-01T20:23:03.260 回答