如何将文本文件转换为字典?

时间:2018-03-02 00:48:02

标签: python

从文件中,我应该返回一个字典,其中每个键都是一个人的名字,每个值都是一个列表,其中包含三个元素:人物,人物和# 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']]}

1 个答案:

答案 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]}