如何在字典中查找现有键并在列表中追加其他值?

时间:2018-02-03 21:30:30

标签: python list dictionary

我的目标是创建一个包含映射到列表列表的关键字的字典。有人能给我一个简单,简单的方法(在函数中),我可以实现这个目标吗?

输入:

我解析为创建字典的txt文件。我将每行中的第一个元素解析为键,其他值映射到键,从而创建一个列表。我通过解析此文件创建了一个字典,但字典值被删除了。

用于解析文件的代码:

pfile='PDict-small.txt'
file1=open(pfile).readlines() # opens the second input and puts it in a list
list=[]
dict={}

for line in file1:
    parts=line.rstrip().split() # splits commas
    dict[parts[0]]=(parts[1:len(parts)])       
print(dict)

Ex Input file:
a hi
b bye
a hello
b bi

我不希望字典替换我的重复项目(被覆盖)并希望它们合并到列表列表中

我希望将匹配的键合并到列表列表中,这样看起来像这样:

dict={'a':[['h','i'],['h','e','l','l','o']], 'b':[['b','y','e']['b','i']]}

这是一种简单的方法吗?提前谢谢!

我尝试过的想法:从第一列值创建一个集合,循环一个只替换值的字典,看它是否与没有重复的集合相匹配......(非常慢而且不是很优雅)

1 个答案:

答案 0 :(得分:1)

您可以使用collections.defaultdict,它会创建一个列表作为新访问密钥的值。然后,您可以从该行创建一个字符列表,并将其附加到defaultdict的键列表中。

假设每行有一个单词且键始终是第一个字符(或字符串,也可以是字符串):

from collections import defaultdict

contents = defaultdict(list)

for line in file:
    key, word = line.rstrip().split()  # unzips the list
    chars = list(word)  # create list of characters from the string
    # if the key is in contents, access its corresponding list and append the list of chars. 
    # if not, create the list, assign it to key, and append to the list.
    contents[key].append(chars)