<p>假设您必须将它存储在一个CSV中,dict中的每一项都有一行,下面将展示如何编写和读取它。如果您有大量的数据,这不是高效的,也不是最佳的,因为它在每一行重复数据,但是它可以很好地压缩。在</p>
<pre><code>#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""csv_dict.py
"""
import csv
import pprint
from collections import namedtuple
Row = namedtuple('Row', [
'name',
'value_1',
'value_2',
'extra_name',
'extra_value_1',
'extra_value_2'
])
l = [
('Apple', 1, 2, {'gala': (2, 1.0)}),
('Grape ', 2, 4, {'malbec': (4, 0.25), 'merlot': (4, 0.75)}),
('Pear', 4, 5, {
'anjou': (5, 0.2),
'bartlet': (5, 0.4),
'seckel': (5, 0.2)}
),
('Berry', 5, 5, {
'blueberry': (5, 0.2),
'blackberry': (5, 0.2),
'straw': (5, 0.2)
})
]
print('List before writing: ')
pprint.pprint(l)
# Writing the data.
with open('test1.csv', 'wb') as fout:
writer = csv.writer(fout)
for row in l:
for k, v in row[3].iteritems():
writer.writerow(row[0:3] + (k,) + v)
# Reading the data.
format_extra = lambda row: (int(row.extra_value_1), float(row.extra_value_2))
with open('test1.csv', 'rU') as fin:
reader = csv.reader(fin)
ll = []
hl = {}
for row in (Row(*r) for r in reader):
if row.name in hl:
ll[hl[row.name]][3][row.extra_name] = format_extra(row)
continue
ll.append(row[0:3] + ({
row.extra_name: format_extra(row)
},))
hl[row.name] = len(ll) - 1
pprint.pprint(ll)
</code></pre>