2013-04-21 2 views
1

У меня есть следующий формат данных. Это словарь с именами в виде ключей и список чисел недели в качестве значений.Как подсчитать недели между номерами конкретной недели?

{'Mali': [17, 16, 23, 18, 17, 16, 17, 18, 16], 
'Gooki': [7, 8, 8, 15, 7, 7, 8], 
'Piata': [85],  
'Goerge': [82], 
'Samoo': [106, 55], 
'Marria: [101,39]} 

Я хотел бы подсчитать количество недель между номерами недель, и изменить значение словаря с количеством недель вместо недели numbers.This означает, что, например, в названии «Samoo» У меня есть неделя 55 и неделю 106. Я хотел бы, чтобы мой код учитывал эти две недели плюс недели между ними (что равно 52 неделям) и устанавливал его как значение для словаря.

У меня есть код ниже, но я не уверен, чтобы сделать это выше count.

datedict = defaultdict(set) 
with open('d:/info.csv', 'r') as csvfile: 
    filereader = csv.reader(csvfile, 'excel') 

    #passing the header 
    read_header = False 
    start_date=date(year=2009,month=1,day=1) 
    #print((seen_date - start_date).days) 
    tdict = {} 
    for row in filereader: 
     if not read_header: 
      read_header = True 
      continue 

# reading the rest rows 
     name,firstseen = row[0],row[3] 
     try: 
      seen_date = datetime.datetime.strptime(firstseen, '%d/%m/%Y').date()    
      deltadays = (seen_date-start_date).days 
      deltaweeks = deltadays/7 + 1 
      key = name 
      currentvalue = tdict.get(key, set()) 
      currentvalue.add(deltaweeks) 
      tdict[key] = currentvalue 

     except ValueError: 
      print('Date value error') 
      pass 

pprint.pprint(tdict) 

Может ли кто-нибудь мне помочь?

+0

У вас есть 'Samoo' дважды в вашем словаре. Это предназначено? Кроме того, не '106-55' равен' 51'? Извините, я могу не понимать ваш вопрос – TerryA

+0

@Haidro Я думаю, он хочет считать 106-ю неделю так, чтобы это было просто '+ 1' – jamylak

+0

@jamylak Ah, что кажется разумным. На самом деле, я думаю, ты прав. Посмотрите на эту строку: 'deltaweeks = deltadays/7 + 1' – TerryA

ответ

1
>>> d = {'Mali': [17, 16, 23, 18, 17, 16, 17, 18, 16], 
'Gooki': [7, 8, 8, 15, 7, 7, 8], 
'Piata': [85], 
'Samoo': [47, 63, 48, 58, 49, 48], 
'Goerge': [82], 
'Samoo': [106, 55], 
'Marria': [101,39]} 
>>> dict((name, max(weeks) - min(weeks) + 1) for name, weeks in d.iteritems()) 
{'Samoo': 52, 'Gooki': 9, 'Mali': 8, 'Goerge': 1, 'Piata': 1, 'Marria': 63} 
+0

@ user2058811' dict' не является переменной, это функция , Также вы не разместили сообщение об ошибке – jamylak

+0

@ user2058811 Вы, должно быть, назвали одну из ваших переменных 'dict', которая затеняла встроенную версию, проверит ваш код для любых переменных, называемых' dict', и измените их имя. Этот фрагмент: 'dict = __builtins __. Dict' должен сбросить его для вас – jamylak

+0

@ user2058811 Вот так:' >>> dict' '', это нормально – jamylak

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