Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我应该用什么样的数据结构来组织数据?_Python - Fatal编程技术网

Python 我应该用什么样的数据结构来组织数据?

Python 我应该用什么样的数据结构来组织数据?,python,Python,初学者程序员在这里。我得到了一个csv文件。一列包含日期,另一列包含表示“缺席”或“出席”的字符串。日期也是一个字符串 我想做的是将参加某一特定约会的孩子数量的百分比分组 比如,作为最终结果的一个例子,我会有一个列表,其中包含日期和学生的百分比 Attendance = [[08/22/2016, 89.013],[08/26/2016, 84.33]] 唯一的问题是我不知道如何达到这一点 有人能告诉我怎么从A点到B点吗 编辑:对于这个例子,让我们假设 file_o = open(csvFil

初学者程序员在这里。我得到了一个csv文件。一列包含日期,另一列包含表示“缺席”或“出席”的字符串。日期也是一个字符串

我想做的是将参加某一特定约会的孩子数量的百分比分组

比如,作为最终结果的一个例子,我会有一个列表,其中包含日期和学生的百分比

Attendance = [[08/22/2016, 89.013],[08/26/2016, 84.33]]
唯一的问题是我不知道如何达到这一点

有人能告诉我怎么从A点到B点吗

编辑:对于这个例子,让我们假设

file_o = open(csvFile, 'r')
csvF = csv.reader(file_o)
for line in csvF:
    line[0] # contains date
    line[1] # contains 'Absent' or 'Present
口述似乎是最简单的方法。使用它记录每个日期的当前/不存在值列表,然后将其相加。因为您只需要某些日期,所以我用这些日期初始化了跟踪字典,而忽略了其他日期

注意:已更新为工作示例

import csv

# write a test file
open('mytest.csv', 'w').write("""08/22/2016,Present,Fiona
08/22/2016,Absent,Ralph
08/23/2016,Present,Fiona
08/23/2016,Absent,Ralph
08/24/2016,Present,Fiona
08/24/2016,Absent,Ralph
08/25/2016,Present,Fiona
08/25/2016,Absent,Ralph



""")

# initialize tracker with wanted dates.
wanted_dates = ['08/22/2016', '08/25/2016', '08/30/2016']
tracker = {wanted:[] for wanted in wanted_dates}

with open('mytest.csv', newline='') as fp:
    reader = csv.reader(fp)
    for row in reader:
        if row:
            date = row[0]
            # only add wanted dates
            if date in tracker:
                present = row[1].lower()
                tracker[date].append(present == 'present')

# create final report. make a copy of tracker's values because we
# will change tracker during enumeration.
for date, present_list in tracker.items():
    if not present_list:
        # no data, so show 0
        present_list = [0]
    tracker[date] = float(sum(present_list))/len(present_list) * 100

for date, percent in sorted(tracker.items()):
    print('{} {:2.2f}'.format(date, percent))

这是一个非常广泛的问题。有几种方法可以做到这一点。分解任务;您是否能够将csv数据读入python列表第1步?你应该在许多小的原子步骤中查看A->B,并逐一处理这些步骤。添加几行示例CSV文件和读取该文件的python程序,即使该程序完全崩溃。尝试csv模块。您可以使用dict,其中键是日期,值是缺席/出席的列表。阅读csv的每一行并更新dict。然后再次运行dict并将其列表替换为当前百分比。@tdelaney是的,这正是我想要的,尽管我不知道如何实现这一点。编辑:我用更多的代码更新了原始帖子非常感谢你的回复,当我在我的程序中尝试代码时,我得到了一个ValueError:太多的值无法解包。另外,假设我已经有了一个我特别需要在文件中查找的日期列表,然后将日期以及“当前”和“缺席”列表附加到dict中。这也可以解决ValueError,因为它不会遍历文件中的每个日期。另外,我的程序告诉我end=是无效的关键字参数,所以我用“r”替换了它,这样做可以吗?应该是newline=并且我保证您使用的是python 3。我有时会混淆打印和打开。。。你会认为他们会用相同的名字。而且,你读这一行的方式肯定和我不一样。获取解包错误。您可以测试行的长度,因为csv也将读取空行。你可以将想要的日期放在一个集合中,并在添加到dict之前检查是否包含。将更新后的代码发布到原始代码下面,这样我就可以更好地了解发生了什么。我已经尝试直接实现了你的代码,以查看它是否会返回任何内容,我唯一更改的是行。例如:date=行[1]。lower and present=行[5]。