打开文本文件并构建字典

时间:2013-11-10 19:16:50

标签: python dictionary set

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

文本中的每一行都有用户名,名字,姓氏,年龄,性别和电子邮件地址。该功能将每个人的信息插入字典中,其用户名为密钥,值为[姓氏,名字,电子邮件,年龄,性别]列表。

基本上我试图做的是打开一个包含这个文本的文件:

           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 个答案:

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