如何计算日期在列表中出现的次数?
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 包中的计数器 class。这是一种字典,其中的键将是日期(在您的情况下),而值将是该日期发生次数的累积计数。因此,您为每个员工创建一个计数器而不是字典。当您解析数据时,您会收集每个员工的新日期并将它们添加到计数器中(请参阅 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})
所以我遇到了问题。我正在尝试创建一个脚本来查看 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 包中的计数器 class。这是一种字典,其中的键将是日期(在您的情况下),而值将是该日期发生次数的累积计数。因此,您为每个员工创建一个计数器而不是字典。当您解析数据时,您会收集每个员工的新日期并将它们添加到计数器中(请参阅 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})