Python 通过使用字符作为键和值添加dict条目

Python 通过使用字符作为键和值添加dict条目,python,dictionary,key,Python,Dictionary,Key,我有一个空字典,我想使用while循环添加到其中,还有一个字符串,我想使用同一个循环对其进行迭代。我要做的是使用字符at作为键,at+1作为值来添加到字典中。在读取字符串时,如果循环遇到字典中已经存在的键,它会将处的值添加到字典中已经存在的值。一旦到达字符串-1的长度,它就会停止 假设给我一个字符串“Hello”来制作字典。我的循环最好将“H”作为第一个字母,然后使用“H”作为键,使用“e”作为值创建一个条目。当涉及到“l”时,它会创建一个条目,其中“l”为键,“l”为值。然后,输入一个以“l”

我有一个空字典,我想使用while循环添加到其中,还有一个字符串,我想使用同一个循环对其进行迭代。我要做的是使用字符at作为键,at+1作为值来添加到字典中。在读取字符串时,如果循环遇到字典中已经存在的键,它会将处的值添加到字典中已经存在的值。一旦到达字符串-1的长度,它就会停止

假设给我一个字符串“Hello”来制作字典。我的循环最好将“H”作为第一个字母,然后使用“H”作为键,使用“e”作为值创建一个条目。当涉及到“l”时,它会创建一个条目,其中“l”为键,“l”为值。然后,输入一个以“l”为键,以“o”为值的条目

这是我到目前为止的功能。它不是从第0个索引开始,而是从第一个索引开始:

    def add(self, word):
        __first += word[0]
        at = 0
        while (at < len(word)-1):
            __follow["""word[at] as the key"""] += word[at+1] #The next character as the value
            at += 1

字符串可以用作字典键,因此您应该能够执行
\u follow[word[at]+=word[at+1]
。但是,您还需要使用
defaultdict
()提供默认值:

如果不这样做,第一次尝试在不存在的键上附加到
\u follow
,将失败,并出现
键错误。使用
defaultdict
,如果您访问一个尚不存在的密钥,那么(在本例中)将得到一个空字符串



顺便说一句,看起来您在一个类方法中。如果是这样的话,
\uuuu first
\uu follow
可能应该是,如果您希望它们是持久的。

您还可以在一行中使用字典构造函数构造
\uuuuuu follow

__follow = dict(zip(word[:-1], word[1:]))
我将对示例字符串“Hello”进行介绍

  • word[:-1]
    将为您提供一个最长为但不包括最后一个字母的字符串
    word[1://code>将为您提供一个从第二个字母开始到结尾的字符串。这给了你两个字符串“地狱”和“埃洛”
  • zip
    是一个python内置函数,它接受两个iterable项并返回每个连续元素的元组列表,因此
    zip(word[:-1],word[1:])
    给出:

    [('H', 'e'), ('e', 'l'), ('l', 'l'), ('l', 'o')]`
    
  • 使用
    dict
    直接调用dictionary构造函数允许您传入元组列表,如
    zip
    提供的元组列表,并生成一个字典,每个元组的第一个元素作为键,第二个元素作为值

  • 把这些放在一起,
    dict(zip(word[:-1],word[1:])
    将为您提供一本类似

    {
        'H': 'e', 
        'e': 'l', 
        'l': 'o'
    }
    

    请注意,这并不是您想要的,因为“Hello”有两个“l”字符,但字典中的键必须是唯一的。不能有两个指向不同值的“l”键。这意味着,无论您选择什么实现,当
    word
    为“你好”时,设置
    \uuuu follow['l']='o'
    将覆盖前面出现的
    \uu follow['l']='l'

    非常感谢!我不知道事情就这么简单!这并不能产生他们想要的结果,因为看起来他们希望
    \uuu follow
    中的每个值都是一个包含键后面所有字符的字符串。不幸的是,我认为这需要一个显式循环。最初指定的问题将单个字符指定为字典值(
    \uu跟随[“”“word[at]作为关键字”“”]=word[at+1]
    ),而不是像当前代码段那样附加到字符串。正如我所指出的,这可能不是我们的初衷,因此修改为附加到字符串是一个不错的选择,尽管您不能再使用漂亮的单行字典初始值设定项:)或者可能我读错了文本:“当涉及到“l”时,它会创建一个条目,其中“l”为键,“l”为值。然后,输入一个以“l”为键、以“o”为值的条目。“
    [('H', 'e'), ('e', 'l'), ('l', 'l'), ('l', 'o')]`
    
    {
        'H': 'e', 
        'e': 'l', 
        'l': 'o'
    }