我的目标是创建一个包含映射到列表列表的关键字的字典。有人能给我一个简单,简单的方法(在函数中),我可以实现这个目标吗?
输入:
我解析为创建字典的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']]}
这是一种简单的方法吗?提前谢谢!
我尝试过的想法:从第一列值创建一个集合,循环一个只替换值的字典,看它是否与没有重复的集合相匹配......(非常慢而且不是很优雅)
答案 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)