2013-03-18 53 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