I have a CSV file shown below.I need to convert CSV to dictionary of dictionaries using python.
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
The output should be like shown below
dataset={'1':{'16':4,'24':1.5},'2':{'32':4,'47':4,'50':4},'3':{'110':4,'150':3,'161':4,'165':3}}
Please let me know how to do this. Thanks in advance
You are looking for nested dictionaries. Implement the perl's autovivification feature in Python (the detailed description is given here). Here is a MWE.
#!/usr/bin/env python
# -*- coding: utf-8 -*-import csvclass 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 valuedef main():d = AutoVivification()filename = 'test.csv'with open(filename, 'r') as f:reader = csv.reader(f, delimiter=',')next(reader) # skip the headerfor 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()
The content of 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