使用字符作为键和值来添加dict条目

时间:2017-10-14 01:40:22

标签: python dictionary key

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

假设我给了字符串“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

该行的正确语法是什么:

__follow["""word[at] as the key"""] += word[at+1]

2 个答案:

答案 0 :(得分:1)

字符串可以用作字典键,因此您应该能够__follow[word[at]] += word[at + 1]。但是,您还需要使用defaultdictdocs):

提供默认值
import collections

__follow = collections.defaultdict(str)

如果您不这样做,则第一次尝试在不存在的密钥上附加到__follow时将失败并显示KeyError。使用defaultdict,如果您访问尚不存在的密钥,您将获得(在本例中)一个空字符串。

顺便说一句,看起来你是一个班级方法。如果是这样,__first__follow似乎应该是instance attributes,如果您希望它们是持久的。

答案 1 :(得分:0)

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

__follow = dict(zip(word[:-1], word[1:]))

我将通过这个示例字符串&#34; Hello&#34;。

  1. word[:-1]会给你一个字符串,但不包括最后一个字母。 word[1:]将从第二个字母开始给你一个字符串并结束。这给你两个字符串&#39; Hell&#39;和&#39; ello&#39;。
  2. zip是一个python内置函数,它接受两个可迭代项并返回一个元组列表,将每个连续元素配对,因此zip(word[:-1], word[1:])给出:

    [('H', 'e'), ('e', 'l'), ('l', 'l'), ('l', 'o')]`
    
  3. 使用dict直接调用字典构造函数,可以传入一个由zip提供的元组列表,并生成一个字典,其中每个元组的第一个元素为key,第二个元素作为值。

  4. 将所有内容放在一起,dict(zip(word[:-1], word[1:]))将为您提供一个类似于

    的字典
    {
        'H': 'e', 
        'e': 'l', 
        'l': 'o'
    }
    

    请注意,这并不是完全你想要的东西,因为&#34;你好&#34;有两个&#39; l&#39;字符,但字典中的键必须是唯一的。你不能有两个&#39; l&#39;键指向不同的值。这意味着无论您选择哪种实施方式,当__follow['l']='o'为&#34;您好&#34;

    时,设置__follow['l']='l'将覆盖上次出现的word。{/ 1>