繁体   English   中英

如何计算日期在列表中显示的次数?

[英]How do I count the number of times a date shows up in a list?

所以我有一个问题。 我正在尝试创建一个脚本,该脚本将查看ArcMap中的图层(我们使用10.2.2),创建一个csv文件,该文件的最终输出将包含技术员的姓名以及他们在特定日期查看的区域数。 为此,我认为我需要创建一个特定于每个技术人员的字典,并以日期作为键,并将出现的次数作为值。

这就是我被困住的地方。 我如何创建一个字典来计算日期出现的次数?

到目前为止,我已经包含了我的代码,而如果去正确的地方,我将无所适从。 另外我不确定如何使csv文件具有我需要的所有三列(名称,日期,计数)。

import arcpy, datetime
from arcpy import mapping
from datetime import datetime

# pass layer to script
mxd = mapping.MapDocument("C:\\Users\\eschlueter\\Desktop\\test\\test.mxd")
layers = mapping.ListLayers(mxd)

inLayer = layers[0]
csvfilename = "C:\\Users\\eschlueter\\Desktop\\test\\test1.csv"

# Create the search cursor
cursor = arcpy.SearchCursor(inLayer)

##define a dictionary of every technician
elizabethtech = {}
unknowntech = {}

##create a counter for each technician's contracts
Elizabethcontract = 0
Unknowncontract = 0

##Define Variables and Iterate through the rows in cursor
desc = arcpy.Describe(inLayer)
fields =  desc.fields
for field in fields:
    for srow in cursor:
        tech = srow.getValue("Technician")
        ModDate = srow.getValue("ModifiedDate")
        if tech == "Elizabeth Schlueter":
            Elizabethcontract = Elizabethcontract + 1
            ESList = []
            ES = {}
            FormDate = ModDate.strftime("%m-%d-%Y")
            print FormDate
            ESList.append(FormDate)
            c = ESList.count(FormDate)
            ES[FormDate] = c
            print ES

我真的可以为此提供一些帮助! 谢谢你们提前帮助我!

更新

我已经能够使用Counter和.update方法创建字典,并创建了所有技术人员的主列表作为键,其值是(日期,计数)。 我现在该如何使用这本词典并打印一个csv文件? 我希望文件具有技术员姓名,日期和日期计数。 这可能吗?

查看collections包中的Counter类。 这是一种字典,其中的键将是日期(在您的情况下),而值将是该日期发生了多少次的累积计数。 因此,为每个员工创建一个Counter而不是一个Dictionary。 解析数据时,您将收集每个员工的新日期并将其添加到Counter(请参见Counter.update)。

from collections import Counter
dates = ['5-11-15','5-12-15','5-11-15']
c = Counter()
c.update(dates) 
print(c)

打印:计数器({'5-11-15':2,'5-12-15':1})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM