【问题标题】:CSV to Dictionary PythonCSV 到字典 Python
【发布时间】:2021-02-01 08:35:07
【问题描述】:

我有一个这样的 CSV 文件:

ALBERO; SHAFT
ALBERINO; SHAFT
MAGGIORATO; EXTRA WIDE

我需要打开该文件并转换为具有以下结构的字典:

glossario={"ALBERO" : "SHAFT", 
           "ALBERINO" : "SHAFT",
           "MAGGIORATO" : "EXTRA WIDE" }

我尝试设置以下代码,但输出不是我所期望的:

glossario= []
with open(glossarioFilePath, encoding='utf-8') as csvf: 
    csvReader = csv.DictReader(csvf, delimiter=';') 
    for line in csvReader: 
        glossario.append(line)

有人有什么建议吗?

谢谢。

【问题讨论】:

  • 你得到了什么输出?可能是因为[] 创建了一个列表而不是字典?

标签: python csv dictionary


【解决方案1】:

DictReader 没有做你想做的事,输出中的键是标题(也就是 csv 的第一行),值是与标题 https://docs.python.org/3/library/csv.html#csv.DictReader 同一列中的值

您想使用常规的csv.reader 并将每行的值设置为字典。

import csv

glossario = {}
glossario_file_path = 'glossario.csv'
with open(glossario_file_path, encoding='utf-8') as csvf:
    reader = csv.reader(csvf, delimiter=';')
    for line in reader:
        key = line[0]
        value = line[1]
        glossario[key] = value

这就是glossario 变量的样子

{'ALBERO': ' SHAFT', 'ALBERINO': ' SHAFT', 'MAGGIORATO': ' EXTRA WIDE'}

请注意,dict 的值包含空格,因此您可能需要添加 value = line[1].strip() 删除它们。

【讨论】:

    【解决方案2】:

    这里我用pythonDict Comprehensions写了更多的pythonic代码。

    import csv
    
    
    glossario = {}
    glossario_file_path = 'your_file_name.csv'
    with open(glossario_file_path, encoding='utf-8') as csvf:
        csv_reader = csv.reader(csvf, delimiter=';')
        glossario = {key: value for key, value in csv_reader}
    
    print(glossario)
    
    {'ALBERO': ' SHAFT', 'ALBERINO': ' SHAFT', 'MAGGIORATO': ' EXTRA WIDE'}
    

    【讨论】:

      【解决方案3】:

      使用此代码使其工作:

      glossario= {}
      with open(glossarioFilePath, encoding='utf-8') as csvf: 
          csvReader = csv.reader(csvf, delimiter=';') 
          for line in csvReader: 
              glossario[line[0]] = line[1]
      

      我每次迭代都用新的键/值对更新字典。

      【讨论】:

      • 但是,请注意,如果 csv 在第一列中有两行具有相同的键,则最终字典将只保留键的最后一行的值。例如- [(1, 2), (1, 3)] 将只保留 {1: 3}
      猜你喜欢
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      • 2015-08-21
      相关资源
      最近更新 更多