在Python中创建和更新字典
我有一个包含3列的表:在Python中创建和更新字典,python,list,csv,dictionary,Python,List,Csv,Dictionary,我有一个包含3列的表: Date Category Value 1/1/2017 Cat1 111 1/2/2017 Cat1 222 1/3/2017 Cat2 333 1/4/2017 Cat3 444 如何使用category作为键,字典列表[{date:value}]作为值,将其转换为字典列表的字典?e、 g {cat1 : [{1/1/
Date Category Value
1/1/2017 Cat1 111
1/2/2017 Cat1 222
1/3/2017 Cat2 333
1/4/2017 Cat3 444
如何使用category作为键,字典列表[{date:value}]作为值,将其转换为字典列表的字典?e、 g
{cat1 : [{1/1/2017 : 111} , {1/2/2017 : 222}]}
{cat2 : [{1/3/2017 : 333}]}
{cat3 : [{1/4/2017 : 444}]}
如何将新字典元素附加到父字典
该数据结构可用于绘制多系列散点图
编辑:
谢谢你的回答和评论。我试了一下以利沙的答案,效果很好。下面是在csv文件中读取并构建字典的完整代码
import csv
from io import StringIO
from itertools import groupby
from operator import itemgetter
input_file = "c:\\path\\to\\test.csv"
with open(input_file, 'r') as file:
content = file.read()
formatted_content = csv.Dictreader(StringIO(content))
result = {}
for category, entries in groupby(sorted(formatted_content, key=itemgetter('Category')), key=itemgetter('Category')):
result[Category] = [{entry['Date']: entry['Value']} for entry in entries]
print(result)
# continue processing the result to plot multiseries chart
您可以利用python及其函数:
import csv
from io import StringIO
from itertools import groupby
from operator import itemgetter
values = u'''Date,Category,Value
1/1/2017,Cat1,111
1/2/2017,Cat1,222
1/3/2017,Cat2,333
1/4/2017,Cat3,444'''
reader = csv.DictReader(StringIO(values))
result = {}
for category, entries in groupby(sorted(reader, key=itemgetter('Category')),
key=itemgetter('Category')):
result[category] = [{entry['Date']: entry['Value']} for entry in entries]
您可以利用python及其函数:
import csv
from io import StringIO
from itertools import groupby
from operator import itemgetter
values = u'''Date,Category,Value
1/1/2017,Cat1,111
1/2/2017,Cat1,222
1/3/2017,Cat2,333
1/4/2017,Cat3,444'''
reader = csv.DictReader(StringIO(values))
result = {}
for category, entries in groupby(sorted(reader, key=itemgetter('Category')),
key=itemgetter('Category')):
result[category] = [{entry['Date']: entry['Value']} for entry in entries]
如果你使用熊猫,你可以这样做:
df['DateVal'] = [{row.Date : row.Value} for idx, row in df.iterrows()]
df.groupby(by='Category')['DateVal'].apply(list).to_dict()
输出:
{'Cat1': [{'1/1/2017': '111'}, {'1/2/2017': '222'}],
'Cat2': [{'1/3/2017': '333'}],
'Cat3': [{'1/4/2017': '444'}]}
- 第一行创建一个新的字典列,其中日期作为键,值作为值
- 第二行按类别将项目分组,生成分组项目的列表,并将其作为字典输出
df['DateVal'] = [{row.Date : row.Value} for idx, row in df.iterrows()]
df.groupby(by='Category')['DateVal'].apply(list).to_dict()
输出:
{'Cat1': [{'1/1/2017': '111'}, {'1/2/2017': '222'}],
'Cat2': [{'1/3/2017': '333'}],
'Cat3': [{'1/4/2017': '444'}]}
- 第一行创建一个新的字典列,其中日期作为键,值作为值
- 第二行按类别将项目分组,生成分组项目的列表,并将其作为字典输出