2013-03-18 51 views
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')将具有包含所有这些单词的值。

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

谢谢!

+0

你想要的字典的值是集合(即没有重复的单词),或列表的相关词语每次出现的? – 2013-03-18 16:32:17

+0

我想要的值是集。如果一个单词出现两次,它只会发生一次。 – 12preschph 2013-03-18 16:43:14

回答

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) 

请注意,我也改变了最里面的循环使用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]) 
+0

非常感谢你!正是我在找什么! – 12preschph 2013-03-18 16:38:34