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