Python字典没有升级

2024-10-03 09:14:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我做错了什么?你知道吗


Tags: inselfforstringintegerdictoverint
3条回答

一句话可以解决你的问题:

>>> {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'}

您正在反复设置相同的键:

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

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

如果要为循环中的每个元素设置不同的键值组合,请设置不同的键。例如,对每个键使用b.string,对值使用b.integer,以元组形式传入:

dictonary.update((b.string, b.integer))

或者直接使用赋值设置键值:

dictonary[b.string] = b.integer

你用听写理解代替整个循环:

dictionary = {b.string: b.integer for b in boogeyman}

可以使用起始值为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)}

如果希望字典以另一种方式映射,则交换整数和字符组件。你知道吗

这很管用

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 

很简单,呃?你知道吗

相关问题 更多 >