我对下面的任务有点小问题。你知道吗
有两个文件。第一个文件(children文件)包含孩子和他们的父母标识号之间的连接,第二个文件(names文件)包含个人标识号和姓名之间的连接。你知道吗
在子女档案中的每一行都有父母的识别码和他/她的子女的识别码:
47853062345 60907062342
46906183451 38504014543
34105139833 36512129874
名称文件具有标识码和名称:
47853062345 Kadri Kalkun
36512129874 Peeter Peedumets
38504014543 Maria Peedumets
46906183451 Madli Peedumets
34105139833 Karl Peedumets
60907062342 Liisa Maria Jaaniste
可以安全地假设名称文件不包含重复的名称或标识码。此外,子文件中的每个标识码在名称文件中都有相应的名称。你知道吗
函数connect有两个参数:子文件名和名称文件名。它返回一个字典,其中key是父母的名字,value是他/她的孩子的集合。你知道吗
你知道吗儿童.txt地址:
47853062345 60907062342
46906183451 38504014543
34105139833 36512129874
36512129874 38504014543
46906183451 48708252344
36512129874 48708252344
你知道吗名称.txt地址:
47853062345 Kadri Kalkun
36512129874 Peeter Peedumets
38504014543 Maria Peedumets
46906183451 Madli Peedumets
34105139833 Karl Peedumets
48708252344 Robert Peedumets
60907062342 Liisa Maria Jaaniste
输出:
connect('children.txt', 'names.txt')
{'Peeter Peedumets': {'Maria Peedumets', 'Robert Peedumets'},
'Madli Peedumets': {'Maria Peedumets', 'Robert Peedumets'},
'Karl Peedumets': {'Peeter Peedumets'},
'Kadri Kalkun': {'Liisa Maria Jaaniste'}}
我把这两个文件都读进了目录和字典。用名字代替了身份证号码,但我不知道如何得到最终结果。 到目前为止我的代码是:
def connect(children_file,names_file):
#children = {}
# with open(children_file, encoding="UTF-8") as f:
#for line in f:
#(key, val) = line.split()
#children[key.strip("\ufeffn' ").strip("\n ")] = val
with open(children_file, encoding="UTF-8") as ins:
children = [[n.strip("\ufeffn' ").strip("\n ") for n in line.split()] for line in ins]
names = {}
with open(names_file, encoding="UTF-8") as f:
for line in f:
splitLine = line.split()
names[splitLine[0].strip("\ufeffn' ").strip("\n ")] = " ".join(splitLine[1:])
names.items()
for lst in children:
for ind, item in enumerate(lst):
if item in names:
lst[ind] = names[item]
d = {}
for i in range(len(children[0][:])):
if children[0][i] not in d:
d[children[0][i]] = set()
d[children[0][i]].add(children[1][i])
return d
print(connect("children.txt","names.txt"))
你的代码总体上有点低效。不要列出孩子的名单,直接做地图。您可以利用字典^{} method, or, you could use a ^{} ,但为了简单起见,我将使用前者。所以,简单地说:
注意,我使用
io.StringIO
来假装我在处理一个文件,而不是直接从问题中复制的字符串。但是io.StringIO
让我们把一个字符串当作一个文件来对待,但是你只需要像平常一样打开你的文件。另请注意,当我从names.txt
拆分行时,我使用了maxsplit
参数,因此名称本身不会被拆分。你知道吗要获得最终结果,只需使用:
相关问题 更多 >
编程相关推荐