我有一个文件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)
答案 0 :(得分: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']
答案 1 :(得分: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)