由于这似乎不是解析 CSV 的问题,我假设您可以使用csv.DictReader
或其他方法将数据转换为以下格式:
rows = [{'Type': 'Vegetable', 'Name': 'Lettuce', 'Application': 'StoreA'},
{'Type': 'Fruit', 'Name': 'Apple', 'Application': 'StoreB'},
{'Type': 'Vegetable', 'Name': 'Orange', 'Application': 'StoreB'},
{'Type': 'Fruit', 'Name': 'Pear', 'Application': 'StoreC'},
{'Type': 'Dairy', 'Name': 'Milk', 'Application': 'StoreA'},
{'Type': 'Fruit', 'Name': 'Plum', 'Application': 'StoreB'},
{'Type': 'Fruit', 'Name': 'Plum', 'Application': 'StoreA'}]
一旦你有了它,这里是创建你正在寻找的嵌套字典的一个选项:
result = {}
for row in rows:
stores = result.setdefault(row['Type'], {})
names = stores.setdefault(row['Application'], [])
names.append(row['Name'])
>>> pprint.pprint(result)
{'Dairy': {'StoreA': ['Milk']},
'Fruit': {'StoreA': ['Plum'],
'StoreB': ['Apple', 'Plum'],
'StoreC': ['Pear']},
'Vegetable': {'StoreA': ['Lettuce'],
'StoreB': ['Orange']}}
您当然可以将for
循环的内容放在一行中:
for row in rows:
result.setdefault(row['Type'], {}).setdefault(row['Application'], []).append(row['Name'])