Python 如何将具有日期索引和int值元组的csv文件转换为适合打印的dict?

Python 如何将具有日期索引和int值元组的csv文件转换为适合打印的dict?,python,matplotlib,Python,Matplotlib,以下是csv数据的示例: Timestamp,Systolic,Diastolic,Pulse 201711051037,135,81,62 201711061614,121,74,60 201711150922,129,74,70 201711170901,135,80,65 我正在使用Python 3.6.8和此脚本创建dict: from csv import DictReader as dict_reader d = dict() with open(CSV_FILE, 'r')

以下是csv数据的示例:

Timestamp,Systolic,Diastolic,Pulse
201711051037,135,81,62
201711061614,121,74,60
201711150922,129,74,70
201711170901,135,80,65
我正在使用Python 3.6.8和此脚本创建dict:

from csv import DictReader as dict_reader

d = dict()

with open(CSV_FILE, 'r') as csvfile:
    reader = dict_reader(csvfile)
    ts, sy, dia, p = next(reader)
    for r in reader:
        d[r[ts]] = int(r[sy]), int(r[dia]), int(r[p])
结果是:

{'201711051037':(135,81,62),'201711061614':(121,74,60),'201711150922':(129,74,70),'201711170901':(135,80,65)}

我想将结果转换成一种可以与Matplotlib plot一起使用的形式。可能是这样的:

Timestamp = [201711051037, 201711061614, 201711150922, 201711170901]
Systolic = [135, 121, 129, 135]
Diastolic = [81, 74, 74, 80]
Pulse = [62, 60, 70, 65]
为了使用Matplotlib创建线图并使用填充和其他功能,我认为数据需要在单独的列表中。我尝试过不同的方法,比如:

index = list(d.keys())
data = list(d.values())
sy = [data[i][j] for i in data for j in data]
并研究了这些类似的问题:


然而,我被困在这一点上。如有任何提示或指示,将不胜感激。谢谢。

从您希望输出的外观开始:

Timestamp = [201711051037, 201711061614, 201711150922, 201711170901]
Systolic = [135, 121, 129, 135]
Diastolic = [81, 74, 74, 80]
Pulse = [62, 60, 70, 65]
您可以从以下网站获得这些信息:

Timestamp = [int(stamp) for stamp in d.keys()]
Systolic = [value[0] for value in d.values()]
Diastolic = [value[1] for value in d.values()]
Pulse = [value[2] for value in d.values()]

如果您对替代解决方案感兴趣,可以使用
*
解压字典值,然后使用
zip
获得三个不同的列表。在这里,我使用
map
将输出转换为列表,这正是您想要的

dic = {'201711051037': (135, 81, 62), '201711061614': (121, 74, 60), 
       '201711150922': (129, 74, 70), '201711170901': (135, 80, 65)}


Timestamp = list(map(int, dic.keys()))
Systolic, Diastolic, Pulse = map(list, zip(*dic.values())) 

print (Timestamp)
print (Systolic)
print (Diastolic)
print (Pulse)

# [201711051037, 201711061614, 201711150922, 201711170901]
# [135, 121, 129, 135]
# [81, 74, 74, 80]
# [62, 60, 70, 65]
此外,如果必须只打印它们,则不需要将值转换为列表

Timestamp = list(map(int, dic.keys()))
Systolic, Diastolic, Pulse = zip(*dic.values())

plt.plot(Timestamp, Systolic, label='Systolic')
plt.plot(Timestamp, Diastolic, label='Diastolic')
plt.plot(Timestamp, Pulse, label='Pulse')
plt.legend()

您需要创建中间词典吗?为什么不直接将数据放入列表?@DobroIRM,使用csv阅读器和切片直接创建列表?听起来好像行得通,我试试看。谢谢。谢谢你提供的有用信息。这些Python习语非常简洁。作为一名初级程序员,我很高兴被介绍给他们。