python - 迭代名称列表并使用最小/最大值创建新列表

标签 python

我正在尝试做一些非常基本的事情。我有一个制表符分隔的文本文件,包含 2 行:日期和名称。日期采用 Excel 数字格式。这是一个例子...

Bill to Name    Date
James Doe       41929
Jane Doe        41852
Adam Adamson    42244
Adam Adamson    41529

我需要做的是遍历姓名列表,找到每个人的最小日期和最大日期之间的差异,并将其输出到另一个列表。输出列表应该与上面的输入列表类似,只是每个名称只有一个,并且数字会更小。并不是每个人都有超过 1 个约会,有些名字只有 1 个,有些名字有 30 个。我几乎只完成了将文件输入。

input_dir = "C:\\Users\\Intern\\Documents\\"
data_file = "Python.txt"
output_dir = "C:\\Users\\Intern\\Documents\\"
output_file_all = "Tenure.txt"

#testing file input
with open(input_dir + data_file,'r') as ifile :
    for idx, row in enumerate(ifile.readlines()) :
        print(row)
        if idx > 0 :
            break

这工作得很好,但是循环让我很困惑。我假设它类似于“对于 ifile 中的每个名称,Tenure = max(date)-min(date)”,但我认为这不会正确迭代。

最佳答案

使用csv module如果输入文件结构变得更加复杂,将会在将来有所帮助。字典似乎是解决这个问题的正确数据结构。 Defaultdict 使我们无需再多写几行。

import csv
from collections import defaultdict

d = defaultdict( list )

input_file = 'a.csv'
output_file = 'b.csv'

with open( input_file, 'rb' ) as infile:
    reader = csv.reader(infile, delimiter='\t')
    next(reader, None)  # skip the header
    for row in reader:
        d[ row[0] ].append( int(row[1]) )

with open( output_file, 'wb' ) as outfile:
    writer = csv.writer(outfile, delimiter='\t')
    for key, value in d.items():
        writer.writerow( [key, max(value) - min(value)] )

输出为“b.csv”:

Jane Doe        0
James Doe       0
Adam Adamson    715

关于python - 迭代名称列表并使用最小/最大值创建新列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34514875/

相关文章:

python - 重构嵌套字典 Python

python - PostGIS 中多边形内的点

python - 正则表达式从日期范围中提取两个日期

python - 使用 Apache2 (mod_wsgi) 的 Django 问题,偶尔是 "unable to import from module",没有明显原因

python - 如何获取 Pandas 系列中某个值出现的比例?

python - 列出表中存在数据或 NULL 的所有组合的算法

python - 如何在 jupyter notebook 中触发保存命令?

python - bsi.product.order 没有属性 'isbn' - Odoo v8 - 新 api

Python 正则表达式捕获问题

python - 如何在 setup.py 脚本中运行所有测试?