Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中将csv转换为字典字典?_Python_Python 3.x_Csv_Dictionary_Anaconda - Fatal编程技术网

如何在python中将csv转换为字典字典?

如何在python中将csv转换为字典字典?,python,python-3.x,csv,dictionary,anaconda,Python,Python 3.x,Csv,Dictionary,Anaconda,我有一个如下所示的CSV文件。我需要使用python将CSV转换为字典字典 userId movieId rating 1 16 4 1 24 1.5 2 32 4 2 47 4 2 50 4 3 110 4 3 150 3 3 161 4 3 165 3 输出应该如下所示 dataset={'1':{'

我有一个如下所示的CSV文件。我需要使用python将CSV转换为字典字典

 userId movieId rating
1         16    4
1         24    1.5
2         32    4
2         47    4
2         50    4
3        110    4
3        150    3
3        161    4
3        165    3
输出应该如下所示

dataset={'1':{'16':4,'24':1.5},
         '2':{'32':4,'47':4,'50':4},
         '3':{'110':4,'150':3,'161':4,'165':3}}
请让我知道怎么做。提前谢谢

import numpy as np

col1,col2,col3 = np.loadtxt('test2.csv',delimiter=',',skiprows=1,unpack=True,dtype=int)

dataset = {}

for a,b,c in zip(col1,col2,col3):
    if str(a) in dataset:
        dataset[str(a)][str(b)]=str(c)
    else:
        dataset[str(a)]={str(b):str(c)}
print(dataset)

这应该可以。上面的示例文件看起来像tsv(制表符分隔值)。如果是这样,请删除示例中的分隔符标志。

您正在查找嵌套字典。在Python中实现perl的Autovification特性(给出了详细的描述)。这是一个MWE

import csv
dataset = dict()
with open("file_name", "rb") as csv_file:
    data = csv.DictReader(csv_file)
    for row in data:
        old_data = dataset.get(row["userId"], None)

        if old_data is None:
            dataset["userId"] = {row["movieId"]: row["rating"] }
        else:
            old_data[row["movieId"]] = row["rating"]
            dataset[row["userId"]] = old_data
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import csv

class AutoVivification(dict):
    """Implementation of perl's autovivification feature."""
    def __getitem__(self, item):
        try:
            return dict.__getitem__(self, item)
        except KeyError:
            value = self[item] = type(self)()
            return value

def main():
    d = AutoVivification()
    filename = 'test.csv'
    with open(filename, 'r') as f:
        reader = csv.reader(f, delimiter=',')
        next(reader)        # skip the header
        for row in reader:
            d[row[0]][row[1]] = row[2]

    print(d)
    #{'1': {'24': '1.5', '16': '4'}, '3': {'150': '3', '110': '4', '165': '3', '161': '4'}, '2': {'32': '4', '50': '4', '47': '4'}}

if __name__ == '__main__':
    main()

test.csv的内容

userId,movieId,rating
1,16,4
1,24,1.5
2,32,4
2,47,4
2,50,4
3,110,4
3,150,3
3,161,4
3,165,3

到目前为止,有人试图解决这个问题吗?如果是,请通过编辑您的问题来分享。如果没有,请在提问之前尝试一些东西。投票被否决,因为吉姆是对的。非常感谢,这是有效的,但我没有得到小数点。Hai,在上面的代码“d”中没有保存以继续。