将集添加到字典中

时间:2013-03-18 23:32:42

标签: python function dictionary tuples

我有一个文件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)

2 个答案:

答案 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)