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 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()
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