Как извлечь час из времени в строке и заполнить пустой словарь? - PullRequest
0 голосов
/ 17 января 2020

У меня есть список (пример показан ниже). Как извлечь час из list1[0] и использовать его в качестве ключа в двух словарях count_by_hour и 'comments_by_hour'? Из полученных ответов я смог получить count_by_hour, но как мне получить общее количество комментариев за каждый упомянутый час? Вот некоторый код:

count_by_hour = {}
comments_by_hour = {}

counts_by_hour will come from index[0] while number of comments(num_comments) come from index[1]

list1 = [['8/16/2016 9:55', 6], ['11/22/2015 13:43', 29], ['5/2/2016 10:14', 1],
    ['8/2/2016 14:20', 3], ['10/15/2015 16:38', 17], ['9/26/2015 23:23', 1],
    ['4/22/2016 12:24', 4], ['11/16/2015 9:22', 1], ['2/24/2016 17:57', 1], 
    ['6/4/2016 17:17', 2]]

Ответы [ 6 ]

0 голосов
/ 17 января 2020

Python понимание - отличный и чистый способ решения более итерационных задач. Понимания являются идиоматическими c Python и обычно быстрее, чем написание Python l oop (поскольку они оптимизированы и обработаны в C).

Кроме того, наиболее распространенные проблемы, такие как разбор даты / времени, могут быть решены с помощью чего-то из стандартной библиотеки. Здесь мы хотим использовать strptime из модуля time (см. Ответ выше Prasanna ).

В этом случае мы можем создать словарь, используя strptime и словарь comprension.

In [1]: list1 = [['8/16/2016 9:55', 6], ['11/22/2015 13:43', 29], ['5/2/2016 10:14', 1],
      : ['8/2/2016 14:20', 3], ['10/15/2015 16:38', 17], ['9/26/2015 23:23', 1],
      : ['4/22/2016 12:24', 4], ['11/16/2015 9:22', 1], ['2/24/2016 17:57', 1],
      : ['6/4/2016 17:17', 2]]

In [2]: from time import strptime

In [3]: hour_dict = {strptime(time, "%m/%d/%Y %H:%M").tm_hour:val for time, val in list1}

In [4]: hour_dict
Out[5]: {9: 1, 13: 29, 10: 1, 14: 3, 16: 17, 23: 1, 12: 4, 17: 2}
}
0 голосов
/ 17 января 2020

Вот мое решение с соответствующими комментариями

dict1 = []

list1 = [['8/16/2016 9:55', 6], ['11/22/2015 13:43', 29], ['5/2/2016 10:14', 1],
    ['8/2/2016 14:20', 3], ['10/15/2015 16:38', 17], ['9/26/2015 23:23', 1],
    ['4/22/2016 12:24', 4], ['11/16/2015 9:22', 1], ['2/24/2016 17:57', 1], 
    ['6/4/2016 17:17', 2]]

for each in list1:
  if each[0].split(':')[0][-2] == " ": #split by : to get second last char and check if >9
    dict1.append(each[0].split(':')[0][-1:]) # if hour is <9 take last char which is hour
  else:
    dict1.append(each[0].split(':')[0][-2:]) else take last 2 chars

0 голосов
/ 17 января 2020

если все метки времени имеют одинаковый формат, вы можете обрабатывать их, как показано ниже

from time import strptime

dict1 = {}
list1 = [['8/16/2016 9:55', 6], ['11/22/2015 13:43', 29], ['5/2/2016 10:14', 1],
    ['8/2/2016 14:20', 3], ['10/15/2015 16:38', 17], ['9/26/2015 23:23', 1],
    ['4/22/2016 12:24', 4], ['11/16/2015 9:22', 1], ['2/24/2016 17:57', 1], 
    ['6/4/2016 17:17', 2]]

for item in list1:
    dt_obj = strptime(item[0], "%m/%d/%Y %H:%M")
    dict1[dt_obj.tm_hour] = item
0 голосов
/ 17 января 2020

3 способа:

Первый способ:

import re

dt = '8/16/2016 9:55'
date_regex = r'\d+\/\d+\/\d{4} (?P<hours>\d+)\:\d+'
match = re.match(date_regex, dt)
print(match.group('hours'))

Второй способ:

dt = '8/16/2016 9:55'
date, time = dt.split(' ')
hours, minutes = time.split(':')

Третий способ:

from datetime import datetime

res = datetime.strptime('8/16/2016 9:55', '%m/%d/%Y %H:%M')
print(res.time().hour)
0 голосов
/ 17 января 2020

Вы можете сопоставить час с RegEx , например, r"^\d{1,2}/\d{1,2}/\d{4}\s(\d{1,2}):\d{2}$", а затем использовать соответствующую группу, или вы можете преобразовать дату и время в python datetime, используя strptime () , а затем получите значение часа даты и времени.

0 голосов
/ 17 января 2020

Таким образом, если все соответствует одному и тому же формату, вы можете разбить строки:

, например:

dict1 = {}

s = '8/16/2016 9:55'
p = s.split(" ") # -> ['8/16/2016', '9:55']

hour, mins = p[1].split(":") # -> ['9', '55']

dict1[hour] = # value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...