-1

需要编写一个函数,该函数将打开的文件作为唯一参数,并返回一个将字符串映射到字符串和整数列表的字典。

文本中的每一行都有一个用户名、名字、姓氏、年龄、性别和一个电子邮件地址。该函数会将每个人的信息插入到字典中,以他们的用户名作为键,值是 [姓氏、名字、电子邮件、年龄、性别] 的列表。

基本上我想做的是打开一个包含以下内容的文本文件:

           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
4

4 回答 4

0
for line in file_name:
        lineData = line.split() #for a key, create a list of values
        my_dict[lineData[0]] = lineData[1:]

我认为这更容易一些......虽然我不确定那是不是你想要的......

于 2013-11-10T19:21:41.870 回答
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    
于 2013-11-10T19:22:34.140 回答
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)}
于 2013-11-10T19:41:36.013 回答
0

如果你有 Python 2.7+,你可以使用字典理解

{l[0]: l[1:] for l in (line.rstrip().split(' ') for line in f)}
于 2013-11-10T19:26:11.350 回答