2015-05-13 4 views
0

Так что у меня проблема. Я пытаюсь создать сценарий, который будет рассматривать слой в 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 

Я действительно мог бы помочь с этим! Спасибо, ребята, за то, что помогли мне заранее!

UPDATE

Я был в состоянии создать словарь с помощью счетчика и .update метод и создал мастер список всех техников, как ключ и значение, являющееся (дату, количество). Как мне теперь взять этот словарь и распечатать файл csv? Я хочу, чтобы файл имел имя техника, дату и количество дат. Это возможно?

+0

Привет Элизабет, добро пожаловать в StackOverflow! Вы можете улучшить свой вопрос, уменьшив образец кода до минимума, необходимого для воспроизведения вашей проблемы. Пожалуйста, прочтите «[Как создать минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve)» в справочном центре. Кроме того, взгляните на [PEP8] (https://www.python.org/dev/peps/pep-0008/), программисты python очень чувствительны к соглашениям об именах и формировании. –

ответ

0

Посмотрите на класс 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})

+0

Я пробовал что-то подобное, но я не думаю, что сделал все правильно. В конце концов я получал одну и ту же запись, а не подсчитывал. Например, я бы распечатал счетчик, и он сказал бы 5-11-2015: 1 несколько раз. Как вы думаете, вы можете мне помочь, предоставив мне образец кода? Счетчики новы для меня. :) – ElizabethSchlueter

+0

Кроме того, как я думаю, возьму счетчик счетчиков и преобразую его, чтобы я мог распечатать csv с датами и счетчиком и именем техника? – ElizabethSchlueter

+0

Я добавил короткий фрагмент кода. Я не знаю, почему вы не можете заставить его работать - это довольно просто. Какие именно объекты вы пытаетесь подсчитать? Являются ли они строками или, возможно, некоторыми другими объектами, которые имеют более сложное поведение? Для того, чтобы счетчики работали на вас, два объекта должны сравниваться равными, если вы хотите, чтобы они представляли одну и ту же дату. –

Смежные вопросы