从文件中,我应该返回一个字典,其中每个键都是一个人的名字,每个值都是一个列表,其中包含三个元素:人物,人物和# 39;年龄和人的身高。
例如,如果我的文件" file.txt"有这样两行:
彼得,男,18岁,180岁 安德鲁,男,40,175
然后这个函数返回的字典是:
{" Peter":["男性",18,180]," Andrew":["男性",40,175 ]}
我试过了:
d={}
L=[]
f= open("items.txt","r")
for line in f:
(key, val) = line.split(",",1)
value= val.split(",")
L.append(value)
d[key] = L
return d
f.close()
它返回: {'彼得':[['男性',' 18',' 180 \ n'],['男性',' 40',' 175']],'安德鲁':[['男性',' 18',' 180 \ n'],['男性',' 40',' 175']]}
答案 0 :(得分:0)
您的代码使用了相同的L
变量,从而产生了您不想要的累积效果。此外,它不会将整数字符串转换为整数,也不会删除最后一项的行尾字符。
其他小错误是返回值并在之后关闭文件(此关闭语句未达到,因此每当python决定时文件都会关闭。with
上下文管理器在这些情况下总是更好)
如果f
是你的文件句柄(或行列表),这个单线程就能胜任:
f="""a,b,1,2
apple,banana,3,4""".splitlines()
d = {t[0]:[int(x) if x.isdigit() else x.rstrip() for x in t[1:]] for t in (l.split(",") for l in f)}
它按照逗号分割,然后构建一个字典理解,使用第一项作为键,其他项作为值,使用rstrip
来处理最后一个字段的换行符。
额外字符串到整数转换使用isdigit
因此它并不完美。 (不适用于负数)。可以用辅助功能代替。
结果:
{'apple': ['banana', 3, 4], 'a': ['b', 1, 2]}