我想创建一个用打开文件中的数据更新两个词典的函数。第一个词是一个“人到国家”的词典,第二个词是“人与人”的词典。
例如,“人与国家”类似{'Greg Van' : ['Canada', 'America'], 'Tori Mars' : ['Thailand']}
,“人与人”字典将为{'Greg Van' : ['Mike Wu', 'Emily Salt'], 'Mia Tan' : ['Sandy Bay', 'Dan Hamilton']}
。
该功能的参数是 (文件,{string:字符串列表}的字典,{string:字符串列表}的字典} - > NoneType
文本文件类似于:
Chan, Ferah
Canada
Pritchett, Mitchell
Pritchett, Jay
Rad, Sarah
France
America
MacKenzie, Corey
Delgado, Manny
Luong, Sam
Vu, Linda
China
Khan, Jane
每个列表的第一行是一个人,然后列出他们居住的0个或更多国家,以及0个或更多人。每个人之间也会有一个空白行间距。文件中的每个列表/段落都是相互关联的。
我不知道如何使用来自给定文件(包括人,国家和/或人)的数据更新两个现有的词组(“人到国家”和“人对人”)。所以基本上我想将数据附加到两个dicts。
我所知道的是,我可以用逗号来区分国家和人民,因为各国都没有。
答案 0 :(得分:0)
按照我看到的模式,我可以看出国家和动物之间的区别在于国家是资本化的,所以,你可以做各种各样的事情:你可以有一个字母,每个字母是关键,作为值的元组,在值(元组)中你将有两个列表,一个用于国家,另一个用于宠物。另一种方法是有一个dict而不是元组,dict会有两个元素,我会告诉你这个dict的结构:
people = {'A': {'countries':['Canada',], 'pets':['dog', 'cat']}}
这将是第一个元素的字典中的映射。代码类似于:
people = {}
file_read = open("asdf.in", "r")
current_person = file_read.readline().strip()
while current_person:
people[current_person] = {}
line = file_read.readline().strip()
people[current_person]['countries'] = []
people[current_person]['pets'] = []
while line:
if line.istitle(): people[current_person]['countries'].append(line)
elif line.islower(): people[current_person]['pets'].append(line)
line = file_read.readline().strip()
current_person = file_read.readline().strip()
print people