向字典键添加值

4

我一直遇到向已存在的键值添加值的问题。

这是我的代码:

mydict = {}

def assemble_dictionary(filename):
   file = open(filename,'r')
   for word in file:
       word = word.strip().lower() #makes the word lower case and strips any unexpected chars
       firstletter = word[0]
       if firstletter in mydict.keys():
           continue
       else:
           mydict[firstletter] = [word]

   print(mydict)

assemble_dictionary('try.txt')

try.txt 包含几个单词 - Ability, Absolute, Butterfly, Cloud。所以,AbilityAbsolute 应该在同一个键下,然而我找不到可以实现这样做的函数。类似于

mydict[n].append(word) 

n 表示行号。

此外,是否有一种简便的方法来定位字典中值的数量?

当前输出 =

{'a': ['ability'], 'b': ['butterfly'], 'c': ['cloud']} 

但我希望它更加完善

{'a': ['ability','absolute'], 'b': ['butterfly'], 'c': ['cloud']}

请问您能分享一下样本输入吗? - Sach
输入在代码底部 - assemble_dictionary('try.txt'),其中 try.txt 包含单词 Ability、Absolute、Butterfly 和 Cloud。 - definaly
4个回答

4
选项1:
当检查字典中的键是否已经存在时,您可以使用追加语句。
mydict = {}

def assemble_dictionary(filename):
   file = open(filename,'r')
   for word in file:
       word = word.strip().lower() #makes the word lower case and strips any unexpected chars
       firstletter = word[0]
       if firstletter in mydict.keys():
           mydict[firstletter].append(word)
       else:
           mydict[firstletter] = [word]

   print(mydict)

选项2:您可以使用字典 setDefault 方法来初始化字典,并在键不存在时设置默认值,然后追加该项。

mydict = {}

def assemble_dictionary(filename):
    file = open(filename,'r')
        for word in file:
            word = word.strip().lower() #makes the word lower case and strips any unexpected chars
            firstletter = word[0]
            mydict.setdefault(firstletter,[]).append(word)
    print(mydict)

谢谢,.append(word) 现在可以工作了。不确定为什么之前不能用,因为我以前试过 x) - definaly

2
您可以将您的单词简单地附加到现有的键上:
def assemble_dictionary(filename):
   with open(filename,'r') as f:
       for word in f:
           word = word.strip().lower() #makes the word lower case and strips any unexpected chars
           firstletter = word[0]
           if firstletter in mydict.keys():
               mydict[firstletter].append(word)
           else:
               mydict[firstletter] = [word]

输出:

{'a': ['ability', 'absolute'], 'b': ['butterfly'], 'c': ['cloud']}

除了与问题无关之外,更好的方法是使用 with 语句打开文件,在处理完后也会自动关闭它。


1
你可以通过这种方式实现。
mydict = {}
a = ['apple', 'abc', 'b', 'c']
for word in a:
    word = word.strip().lower() #makes the word lower case and strips any unexpected chars
    firstletter = word[0]
    if firstletter in mydict.keys():
        values = mydict[firstletter] # Get the origial values/words 
        values.append(word) # Append new word to the list of words
        mydict[firstletter] = values
    else:
        mydict[firstletter] = [word]

print(mydict)

输出:
{'a': ['apple', 'abc'], 'c': ['c'], 'b': ['b']}

0

mydict[firstletter] = [word]

这行代码会替换字典中指定键的值。

由于键是列表格式,请尝试:

mydict[firstletter].extend(word)

输出 = {'a': ['能力', 'a', 'b', 's', 'o', 'l', 'u', 't', 'e'], 'b': ['蝴蝶'], 'c': ['云']}. - definaly
如果想使用 extend,应该将一个列表作为参数传递给它,例如 .extend([word]) - toti08
我认为是因为在for循环中的.strip()导致了这个输出,我尝试了其他答案,也遇到了同样的问题。 - Avichal Bettoli
@AvichalBettoli 不是的,我尝试了你的代码,得到了相同的结果,但是如果将extend(word)替换为extend([word]),它就可以正常工作。 - toti08

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接