2

我需要使用我拥有的集合来更新字典。我的程序本质上需要一个集合并将其分配给一个值(在字典中)。如果该集合已经存在,我需要更新它的值(继续将这些值相加)。

这是我的程序现在的工作方式:

    for line in fd:
    new_line = line.split(' ')
    for word in new_line:
        new_word = ''.join(l for l in word if l.isalpha())
        new_word = new_word.lower()
        ind_count = 0
        for let in new_word:
            c_dict[let, ind_count] = new_word
            ind_count += 1

在我的fd文件中,它包含一个单词列表。

我希望我的结果看起来像这样:

print(c_dict)

{ (0, "h") : { "hello", "helps" } , (0, "c") : { "cow" } }

这基本上从单词中获取一个字母,它是索引#,并将值设置为该单词。我的文件将有数百个在位置 0 处具有字母“h”的单词,基本上键 (0, 'h') 将具有包含所有这些单词的值。

现在,我的程序只是替换了这些值。任何帮助将不胜感激。

谢谢!

4

1 回答 1

3

dict.setdefault()非常适合:

for line in fd:
    new_line = line.split(' ')
    for word in new_line:
        new_word = ''.join(l for l in word if l.isalpha())
        new_word = new_word.lower()
        for ind_count, let in enumerate(new_word):
            c_dict.setdefault((let, ind_count), set()).add(new_word)

请注意,我还将最里面的 for 循环更改为使用,enumerate()而不是在循环内手动递增ind_index

c_dict.setdefault((let, ind_count), set()).add(new_word)在行为上等同于以下代码:

if (let, ind_count) in c_dict:
    c_dict[let, ind_count].add(new_word)
else:
    c_dict[let, ind_count] = set([new_word])
于 2013-03-18T16:31:27.243 回答