【问题标题】:CSV file to a dictCSV 文件到字典
【发布时间】:2016-04-11 22:41:50
【问题描述】:

所以我正在处理一项任务,我正在尝试找出一个步骤,我们将获取一个 csv 文件并将其转换为字典。我的限制之一是不导入 csv。在此处搜索有关将 CSV 文件转换为字典的其他问题时,它们都使用 import csv。例如,如果我的 CSV 文件包含以下内容(第一行是标题):

"Headline","Newspaper", "Year Published", "Author"
"Crash", "New York Times", "2001", "Smith"
"Fire", "Washington Post", "2010", "Dudley"
"Addiction", "National Enquirer", "2008", "Kuhn"

我如何能够在不导入 csv 的情况下将这些数据转换为 Python 中的字典?

我目前正在做的事情,我有一些伪代码,因为我知道我想为这些部分执行什么,但我不能 100% 确定如何执行,因为这是我使用文件和字典的第一周一起:

def read_file(filename):
    d={}
    with open(filename , 'r') as f:
        first_line = f.readline()
            for line in f:
                if line.strip().isdigit():
                # assign first string in line as key
                    #assign rest of strings in line as value to key in that line as a tuple

【问题讨论】:

  • 当您说“不导入 csv”时,您的意思是不使用标准库中的 csv 模块吗?
  • SO 不是代码编写服务。请为此展示您自己的代码尝试,并说明您在自己的代码中遇到的困难。
  • @idjaw 我完全理解这一点,但没想到会这样。
  • @Nick 很棒。那么你的代码在哪里? :)

标签: python csv dictionary


【解决方案1】:

您可以转置标题中拉出键后剩余的行:

with open("foo.csv") as f:
    # pull header line and split into keys
    keys = next(f).strip().split(",")
    # transpose remaining lines 
    values = zip(*(line.strip().split(",") for line in f))
    # zip keys and values and create a dict
    dct = dict(zip(keys, vals)

转置将为您提供按列排列的元素,以便它们与每个标题键匹配。

【讨论】:

    【解决方案2】:

    您可以为每一行创建一个包含字典项的列表,这更像是一种 JSON 样式的格式。

    with open(filename) as f:
        keys = [val.strip().replace('"', '') for val in f.readline().split(',')]
        result = []
        for line in f:
            line = [val.strip().replace('"', '') for val in line.split(',')]
            result.append({key: val for key, val in zip(keys, line)})
    
    >>> result
    [{'Author': 'Smith',
      'Headline': 'Crash',
      'Newspaper': 'New York Times',
      'Year Published': '2001'},
     {'Author': 'Dudley',
      'Headline': 'Fire',
      'Newspaper': 'Washington Post',
      'Year Published': '2010'},
     {'Author': 'Kuhn',
      'Headline': 'Addiction',
      'Newspaper': 'National Enquirer',
      'Year Published': '2008'}]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-22
      • 2015-06-24
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      相关资源
      最近更新 更多