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