Python按逗号按行拆分为列表的映射

Python按逗号按行拆分为列表的映射,python,Python,我的问题和这个问题很相似 但我需要的是领先一步。我的清单实际上是这样的 name,phone,monthlysalary,age Peter,1234567,100000,28 John,22345,200000,30 Mary,32345,300000,40 如果我使用以下方法打破列表:- Source="""name,phone,monthlysalary,age Peter,1234567,100000,28 John,22345,200000,30 Mary,32345,300000

我的问题和这个问题很相似

但我需要的是领先一步。我的清单实际上是这样的

name,phone,monthlysalary,age
Peter,1234567,100000,28
John,22345,200000,30
Mary,32345,300000,40
如果我使用以下方法打破列表:-

Source="""name,phone,monthlysalary,age
Peter,1234567,100000,28
John,22345,200000,30
Mary,32345,300000,40"""
x = [elem.split(",") for elem in Source.split("\n")]
然后我可以得到如下结果:-

[['name', 'phone', 'monthlysalary', 'age'],
 ['Peter', '1234567', '100000', '28'],
 ['John', '22345', '200000', '30'],
 ['Mary', '32345', '300000', '40']]    
但我需要的是:-

{'Peter': ['1234567', '100000', '28'],
'John': ['22345', '200000', '30'],
'Mary': ['32345', '300000', '40']}
我想:

  • 忽略标题行(姓名、电话、每月、年龄)
  • 以列表的形式获取结果,这样我就可以使用键名来查找它们的详细信息
  • 如果我能用一句话来表达,那就太好了,但这是一种装饰
  • 当然,为了实现这一点,我可以轻松地编写如下简单代码:-

    Source="""name,phone,monthlysalary,age
    Peter,1234567,100000,28
    John,22345,200000,30
    Mary,32345,300000,40"""
    x = dict()
    _, *lines = Source.split("\n")
    for line in lines:
        head, *tail = line.split(',')
        x[head] = tail
    

    但是我想知道的是,使用一个liner是否可以实现这一点?

    这就是CSV模块所做的:

    import csv
    
    data = csv.DictReader(filename, delimiter=",")
    

    如果您不想使用
    csv
    模块,您可以复制
    DictReader
    的行为,如下所示:

    >>> data = """name,phone,monthlysalary,age
    ... Peter,1234567,100000,28
    ... John,22345,200000,30
    ... Mary,32345,300000,40"""
    ...
    >>> lines = iter(data.splitlines())
    >>> head = next(lines).split(",")
    >>> [dict(zip(head, line.split(","))) for line in lines]
    [{'age': '28', 'monthlysalary': '100000', 'name': 'Peter', 'phone': '1234567'},
     {'age': '30', 'monthlysalary': '200000', 'name': 'John', 'phone': '22345'},
     {'age': '40', 'monthlysalary': '300000', 'name': 'Mary', 'phone': '32345'}]
    
    如果您希望更新的结果格式为一行,请尝试以下操作:

    >>> {x[0]: x[1:] for x in (line.split(",") for line in data.splitlines()[1:])}
    {'John': ['22345', '200000', '30'],
     'Mary': ['32345', '300000', '40'],
     'Peter': ['1234567', '100000', '28']}
    

    然而,导入
    csv
    模块的内存消耗和一行程序的好处可能都被高估了。

    这看起来像一个普通的csv文件吗?你试过在中阅读它吗?在这个问题“将结果作为列表的映射”后面展示你的代码努力。你是指一个目录列表吗?因为没有人指出python文档,所以,给你:或者谷歌一个教程,一步一步地解释这个模块。@sachindobey my bad,没有显示我的codeThx,但我不想使用任何CSV库,因为我希望尽可能减少内存需求,这是Python标准库的一部分。不确定这与内存需求有什么关系。那太酷了。但出于好奇,我能在不使用csv库的情况下用一行python实现同样的效果吗?顺便说一句,csv.DictReader将返回一个dict对象,而不是dict of List。这是Python.Yup的一行代码,但这不是dict of List,我无法执行List print(data[“Peter”])来获取列表123456710000,28