嵌套字典问题

我需要创建一个使用CSV文件并返回嵌套字典的程序。外字典的键应该是第二行中的每一行中的第一个值(以便省略具有列名的行)。外层字典中每个键的值应该是另一个字典,我将在下面解释。


内部字典的键应为列名,而值应为与每一行中该列对应的值。


例子:


对于这样的CSV文件:


column1, column2, column3, column4

4,12,5,11

29,47,23,41

66,1,98,78

我想以这种形式打印出数据:


my_dict = {

'4': {'column1':'4','column2':'12', 'column3':'5', 'column4':'11'},

'29': {'column1':'29', 'column2':'47', 'column3':'23', 'column4':'41'},

'66': {'column1':'66', 'column2':'1', 'column3':'98', 'column4':'78'}

}

到目前为止,我所获得的最接近的数字(还差得远):


import csv

import collections


def csv_to_dict(file, delimiter, quotechar):


list_inside_dict = collections.defaultdict(list)

with open(file, newline = '') as csvfile:

    reader = csv.DictReader(csvfile, delimiter=delimiter, quotechar=quotechar)

    for row in reader:

        for (k,v) in row.items(): 

            list_inside_dict[k].append(v)

return dict(list_inside_dict)

如果我尝试使用delimiter = ",",和上面的示例CSV文件运行该函数quotechar = "'",它将返回以下内容:


{'column1': ['4', '29', '66'], ' column2': ['12', '47', '1'], ' column3': ['5', '23', '98'], ' column4': ['11', '41', '78']}

在这一点上我迷路了。我试图改变:


list_inside_dict = collections.defaultdict(list)

为了


list_inside_dict = collections.defaultdict(dict)

然后,只需更改每个键的值即可,因为我无法追加到字典中,但是一切都变得非常混乱。所以我从头开始,发现我到达了同一个地方。


明月笑刀无情
浏览 158回答 3
3回答

当年话下

您可以使用字典理解:import csvwith open('filename.csv') as f:  header, *data = csv.reader(f)  final_dict = {a:dict(zip(header, [a, *b])) for a, *b in data}输出:{'4': {'column1': '4', ' column2': '12', ' column3': '5', ' column4': '11'},  '29': {'column1': '29', ' column2': '47', ' column3': '23', ' column4': '41'},  '66': {'column1': '66', ' column2': '1', ' column3': '98', ' column4': '78'}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python