【问题标题】:CSV lines as key/values in a dictionary [duplicate]CSV 行作为字典中的键/值 [重复]
【发布时间】:2019-11-08 21:00:24
【问题描述】:

想象一个看起来像这样的 CSV

Zipcode  State
0000     CA
0001     CA

我想创建一个字典,其中键是邮政编码,值是状态。

我已经写了一个逐行读取CSV的函数,

for i, line in enumerate(reader):
    print ('line[{}] = {}'.format(i, line))

output: 
line[1] = ['0000', 'CA']
line[2] = ['0001', 'CA']

如何获取每一行并使其成为字典中的条目? 希望输出作为返回dict[zipcode]

【问题讨论】:

  • 欢迎来到 SO。请花时间阅读How to Ask 和该页面上的其他链接。这不是论坛或教程。

标签: python csv dictionary


【解决方案1】:

由于您已经在解析的行上创建了一个迭代器,因此您可以使用字典推导来获得所需的内容。

{line[0]: line[1] for line in reader}

【讨论】:

  • 这就是我要写的全部内容吗?我如何使用字典理解?它似乎不起作用
  • 它怎么不适合你?我无法重现您遇到的任何问题,因为我不知道您的 reader 变量是如何定义的。
  • 我的代码是import csv with open('ZIPCODE.csv', 'r') as csv_file: reader = csv.reader(csv_file, delimiter="\t") for i, line in enumerate(reader): print ('line[{}] = {}'.format(i, line)) mydict = {line[0]: line[1] for line in reader} 我得到的错误:Traceback (most recent call last): File "<input>", line 11, in <module> File "<input>", line 11, in <dictcomp> ValueError: I/O operation on closed file. Line 11 = {line[0]: line[1] for line in reader}
  • 看起来当您enumerate(reader) 时,您正在使用csv.reader 返回的迭代器。因此,当您使用该迭代器进行字典理解时,没有剩余的行可以理解。此外,如果您尝试在 open 上下文之外访问阅读器,您将收到该 I/O 错误。
【解决方案2】:

使用pandas.read_csv的替代方法

import pandas as pd

df=pd.read_csv(file_path)
df.set_index('Zipcode').T.to_dict(orient='records')[0]

输出:

{'0000': 'CA', '0001': 'CA'}

【讨论】:

  • 谢谢!没有熊猫还有其他方法吗?
  • 有,但我认为这是最有效的(花费最少的时间)
猜你喜欢
  • 2017-12-17
  • 2013-04-22
  • 2015-01-08
  • 2021-01-20
  • 2018-09-16
  • 2019-11-13
  • 2016-10-21
  • 1970-01-01
  • 2013-10-28
相关资源
最近更新 更多