在Python中创建和更新字典

在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/

我有一个包含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/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'}]}
  • 第一行创建一个新的字典列,其中日期作为键,值作为值
  • 第二行按类别将项目分组,生成分组项目的列表,并将其作为字典输出

到目前为止,您编写了哪些代码?@MikeTung Is Table在任何数据库或文本文件中?@JoeHo您的数据是什么格式的?数据的格式如何?在您的示例中,它的间距很小,但在您的解释器中,if是一个多行字符串吗?您的代码在哪里?到目前为止您编写了什么代码?@MikeTung is Table在任何数据库或文本文件中?@JoeHo您的数据是什么格式的?数据的格式如何?在示例中,它的间距很小,但在解释器中,它是一个多行字符串吗?代码在哪里?