2013-03-18 2 views
0

У меня есть файл random.txt, из которого мне нужно взять каждое слово и индексировать позицию и букву в словаре. Например, это будет следующим: {(3,'m'):'example'}. Каждый раз, когда есть слово, которое имеет одну и ту же проиндексированную букву в той же позиции, оно только добавляет слово к значению словаря, поэтому оно должно быть {(3,'m'):'example','salmon'} и не печатать каждый отдельно.Добавление наборов в словарь

Это то, что у меня есть, и оно не добавляет слово к значению ключа каждый раз, когда оно просто делает свою собственную ценность каждый раз.

def fill_completions(c_dict, fileObj): 
    import string 
    punc = string.punctuation 
    for line in fileObj: 
     line = line.strip() 
     word_list = line.split() #removes white space and creates a list 
     for word in word_list: 
      word = word.lower()  
      word = word.strip(punc) #makes lowercase and gets rid of punctuation 
      for position,letter in enumerate(word): 
       "position: {} letter: {}".format(position,letter) 
       my_tuple = (position,letter) 
       if word in my_tuple: 
        c_dict[my_tuple] += word 
       else: 
        c_dict[my_tuple] = word 
     print(c_dict) 

ответ

1

В настоящее время вы добавляете строку, а затем добавляете ее в строку.

Вам нужно поместить кортеж в качестве вашего значения, а затем добавить к кортежу.

>>> m = dict() 
>>> m['key'] = 'Hello' 
>>> m['key'] += 'World' 
>>> print m['key'] 
HelloWorld 
>>> 
>>> m['key'] = ('Hello',) 
>>> m['key'] += ('World',) 
>>> print m['key'] 
('Hello', 'World') 
>>> # Or, if you want the value as a list... 
>>> m['key'] = ['Hello'] 
>>> m['key'].append('World') 
>>> print m['key'] 
['Hello', 'World'] 
0

Я думаю, что вы хотите, чтобы изменить код, заполняющий c_dict в внутреннем цикле к следующему:

  if my_tuple in c_dict: 
       c_dict[my_tuple].add(word) 
      else: 
       c_dict[my_tuple] = set([word]) 

Вот эквивалентный вариант с использованием dict.setdefault(), что является немного более кратким:

  c_dict.setdefault(my_tuple, set()).add(word) 
Смежные вопросы