需要编写一个函数,该函数将打开文件作为唯一参数,并返回将字符串映射到字符串和整数列表的字典。
文本中的每一行都有用户名,名字,姓氏,年龄,性别和电子邮件地址。该功能将每个人的信息插入字典中,其用户名为密钥,值为[姓氏,名字,电子邮件,年龄,性别]列表。
基本上我试图做的是打开一个包含这个文本的文件:
ajones Alice Jones 44 F alice@alicejones.net
并返回这样的内容:
{ajones: ['Jones', 'Alice', 'alice@alicejones.net', 44, 'F']}
到目前为止,我已经做到了这一点,但还有其他更简单的方法吗?
def create_dict(file_name):
'''(io.TextIOWrapper) -> dict of {str: [str, str, str, int, str]}
'''
newdict = {}
list2 = []
for line in file_name:
while line:
list1 = line.split() #for a key, create a list of values
if list2(0):
value += list1(1)
if list2(1):
value += list1(2)
if list2(2):
value += list1(3)
if list2(3):
value += list1(4)
newdict[list1(0)] = list2
for next_line in file_name:
list1 = line.split()
newdict[list1(0)] = list1
return newdict
def helper_func(fieldname):
'''(str) -> int
Returns the index of the field in the value list in the dictionary
>>> helper_func(age)
3
'''
if fieldname is "lastname":
return 0
elif fieldname is "firstname":
return 1
elif fieldname is "email":
return 2
elif fieldname is "age":
return 3
elif fieldname is "gender":
return 4
答案 0 :(得分:0)
for line in file_name:
lineData = line.split() #for a key, create a list of values
my_dict[lineData[0]] = lineData[1:]
我认为更容易......虽然我不确定那样做你想要的......
答案 1 :(得分:0)
建立字典肯定有更简单的方法:
d={}
st='ajones Alice Jones 44 F alice@alicejones.net'
li=st.split()
d[li[0]]=li[1:]
print d
# {'ajones': ['Alice', 'Jones', '44', 'F', 'alice@alicejones.net']}
如果您想更改字段的顺序,请在存储字段时执行此操作:
d={}
st='ajones Alice Jones 44 F alice@alicejones.net'
li=st.split()
li2=li[1:]
d[li[0]]=[li2[i] for i in (1,0,4,3,2)]
print d
# {'ajones': ['Jones', 'Alice', 'alice@alicejones.net', 'F', '44']}
或者,只使用命名元组或字典而不是数据字段列表。
如果您拥有该部分,则可以将其与您的文件一起使用:
# untested...
def create_dict(file_name):
newdict = {}
with open(file_name) as fin:
for line in fin:
li=line.split()
li2=li[1:]
li2[2]=int(li[2])
newdict[li[0]]=[li2[i] for i in (1,0,4,3,2)]
return newdict
答案 2 :(得分:0)
如果你有Python 2.7+,你可以使用dictionary comprehension:
{l[0]: l[1:] for l in (line.rstrip().split(' ') for line in f)}
答案 3 :(得分:0)
同意第一个答案,这里是与规范略有不同的版本:
file=open('filename', 'r')
{username: [lname, fname, email, int(age), sex] for username, fname, lname, age, sex, email in (line.rstrip().split(' ') for line in file)}