如何使用循环函数从CSV创建字典?

时间:2018-06-18 05:54:52

标签: python-3.x csv dictionary

我正在尝试使用以下列从CSV的评论表中创建多个词典: Table of Comments

我需要为每一行创建一个字典(希望使用循环,所以我不必手动创建它们),其中字典键是:

  • ID
  • ReviewType
  • 注释

然而,我无法想出一个快速的方法来做到这一点。我尝试使用以下代码创建字典列表:

# Import libraries
import csv
import json
import pprint

# Open file
reader = csv.DictReader(open('Comments.csv', 'rU'))

# Create list of dictionaries
dict_list = []
for line in reader:
    dict_list.append(line)

pprint.pprint(dict_list)

但是,现在我不知道如何访问字典或键值对是否正确匹配,因为在下图中:

  • ID,ReviewType和Comment似乎没有显示为 字典键
  • 评论值似乎显示为半句子列表。

Result

有没有办法只为每行创建一个字典而不是字典列表?

注意:我确实查看过this个问题,但这并没有真正帮助。

3 个答案:

答案 0 :(得分:1)

由于您没有给出可重现的示例,使用示例DataFrame,我已经为您创建了一个

import pandas as pd
df = pd.DataFrame([[1, "Contractor", "Please post"], [2, "Developer", "a reproducible example"]])
df.columns = ['ID', 'ReviewType', 'Comment']

在您的计算机中,键入:

,而不是这样做
df = pd.read_csv(file_path)

将csv文件作为pandas DataFrame读取。

现在我将创建一个名为dictList的列表,该列表最初将为空,我将使用DataFrame df

中每行的字典填充它
dictList = []

#Iterate over each row in df
for i in df.index:

    #Creating an empty dictionary for each row
    rowDict = {}

    #Populating it
    rowDict['ID'] = df.at[i, 'ID']
    rowDict['ReviewType'] = df.at[i, 'ReviewType']
    rowDict['Comment'] = df.at[i, 'Comment']

    #Once I'm done populating it, I will append it to the list
    dictList.append(rowDict)

    #Go to the next row and repeat.

现在迭代我们为我的例子创建的词典列表

for i in dictList:
    print(i)

我们得到了

{'ID': 1, 'ReviewType': 'Contractor', 'Comment': 'Please post'}
{'ID': 2, 'ReviewType': 'Developer', 'Comment': 'a reproducible example'}

答案 1 :(得分:1)

你走了。我将评论放入数组

# Import libraries
import csv
import json
import pprint

# Open file


def readPerfReviewCSVToDict(csvPath):
    reader = csv.DictReader(open(csvPath, 'rU'))

    perfReviewsDictionary = []
    for line in reader:
        perfReviewsDictionary.append(line)

    perfReviewsDictionaryWithCommentsSplit = []
    for item in perfReviewsDictionary:
        itemId = item["id"]
        itemType = item["type"]
        itemComment = item["comments"]
        itemCommentDictionary = []
        itemCommentDictionary = itemComment.split()
        perfReviewsDictionaryWithCommentsSplit.append({'id':itemId, 'type':itemType, 'comments':itemCommentDictionary})

    return perfReviewsDictionaryWithCommentsSplit

dict_list = readPerfReviewCSVToDict("test.csv")
pprint.pprint(dict_list)

输出结果为:

[{'comments': ['test', 'ape', 'dog'], 'id': '1', 'type': 'Test'},
 {'comments': ['dog'], 'id': '2', 'type': 'Test'}]

答案 2 :(得分:0)

你想要这个吗?

DICT = {}
for line in reader:
    DICT[line['ID']] = line