在Python中创建和更新字典

时间:2017-05-07 03:06:20

标签: 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

如何使用类别作为键,字典列表[{date:value}]作为值将其转换为字典列表的字典? e.g。

{cat1 : [{1/1/2017 : 111} , {1/2/2017 : 222}]}
{cat2 : [{1/3/2017 : 333}]}
{cat3 : [{1/4/2017 : 444}]}

如何将新词典元素附加到父词典?

然后,可以使用此数据结构绘制多个系列散点图。

编辑:

感谢所有的答案和评论。我尝试了Elisha的答案,它完美无缺。这是在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

2 个答案:

答案 0 :(得分:2)

您可以利用python csv.DictReaderitertools.groupby函数:

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]

答案 1 :(得分:2)

如果您使用pandas,您可以这样做:

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'}]}
  • 第一行创建一个新的词典列,其中包含Date作为键,Value值作为值
  • 第二行按类别将项目分组,生成分组项目的列表,并将其作为词典吐出。
相关问题