python 如何从CSV文件创建一个字典,将多个值附加到三个键?[已关闭]

inn6fuwd  于 2022-11-28  发布在  Python
关注(0)|答案(2)|浏览(130)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

昨天关门了。
Improve this question
我需要能够将CSV文件中的多个值追加到一个有三个键的字典中。这些键是morningmiddaynight。这些值应该来自CSV文件的每一行。
理想情况下,它应该如下所示。
我不能使用numpycsv模块,所以这些选项不可用。它必须在没有导入的情况下工作,而且我不确定如何使用字典和如何处理它来获得我需要的输出。
以下是CSV文件的示例:

{
    'morning': {[5, 5, 10, 17, 20, 21]},
    'midday': {[10, 20, 25, 15, 8, 3]},
    'night': {[3, 5, 2, 7, 15, 29]}
}

下面是我的代码:

time_list = []
time_dict = {}

with open('stats.csv', 'r') as data_file:
    headers = data_file.readline()

    for line in data_file:
        Time, VS = line.split(',')
        time_list.append(int(VS))
        time_dict[Time] = time_dict.get(Time, 0) + int(VS)

追加到列表中会生成每个值,即:

[2, 3, 4, 5, 6, 7, 8]

但是对于字典,它并不单独显示它所附加到的键的每个值,而是将每个键的所有值加在一起。
打印字典时会显示以下内容:

{'morning': 2097, 'midday': 1240, 'night': 1533}

我不确定如何处理这个问题,使字典看起来像下面这样:

{
    'morning':{[5, 5, 10, 17, 20, 21]},
    'midday': {[10, 20, 25, 15, 8, 3]},
     'night': {[3, 5, 2, 7, 15, 29]}
}

注意:我找到的许多答案都使用了csv模块,但不幸的是,我不能使用它。
字典的keytype也必须是int,这样我就可以在字典上执行数学运算,找出最大值、最小值、平均值等

ifmq2ha2

ifmq2ha21#

我会这样做:

import csv 

with open(fn) as csv_in:
    reader=csv.reader(csv_in)
    header=next(reader)
    data={}
    for t,vs in reader:
        data.setdefault(t, []).append(int(vs))

从评论“我不能使用导入”:

with open(fn) as csv_in:
    header=next(csv_in)
    data={}
    for t,vs in (line.split(',') for line in csv_in):
        data.setdefault(t, []).append(int(vs))

来自注解“数据在第八列”:
稍微修改一下(假设是Python 3),你可以设置*vs,这样vs在展开式中接受一个变量:

with open(fn) as csv_in:
    header=next(csv_in)
    data={}
    for t,*vs in (line.split(',') for line in csv_in):
        data.setdefault(t, []).append(int(vs[7]))

给定此文件:

Time,VS
morning,1,2,3,4,5,6,7,80
morning,1,2,3,4,5,6,7,81
midday,1,2,3,4,5,6,7,90
midday,1,2,3,4,5,6,7,91
night,1,2,3,4,5,6,7,100
night,1,2,3,4,5,6,7,101

印刷品:

>>> data
{'morning': [80, 81], 'midday': [90, 91], 'night': [100, 101]}
j91ykkif

j91ykkif2#

不如这样改变你的策略:

morning_list= []
midday_list= []
night_list= []
time_dict = dict()

with open("stats.csv", "r") as data_file:
    headers = data_file.readline()

    for line in data_file:
        Time, VS = line.split(",")
        if Time == "morning":
           morning_list.append(int(VS))
        elif Time == "midday":
           midday_list.append(int(VS))
        elif Time == "night":
           night_list.append(int(VS))

time_dict["morning"] = morning_list
time_dict["midday"] = midday_list
time_dict["night"] = night_list

相关问题