操纵词典中的设置

时间:2013-03-18 16:28:10

标签: python dictionary set

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

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

    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')将包含包含所有这些单词的值。

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

谢谢!

1 个答案:

答案 0 :(得分: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])