Как извлечь час из времени в строке и заполнить пустой словарь?

У меня есть список (пример показан ниже). Как извлечь час из count_by_hour 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 = [[Ǝ/16/2016 9:55', 6], [ཇ/22/2015 13:43', 29], [Ƌ/2/2016 10:14', 1],
    [Ǝ/2/2016 14:20', 3], [ཆ/15/2015 16:38', 17], [Ə/26/2015 23:23', 1],
    [Ɗ/22/2016 12:24', 4], [ཇ/16/2015 9:22', 1], [ƈ/24/2016 17:57', 1], 
    [ƌ/4/2016 17:17', 2]]

Всего 5 ответов


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

dict1 = []

list1 = [[Ǝ/16/2016 9:55', 6], [ཇ/22/2015 13:43', 29], [Ƌ/2/2016 10:14', 1],
    [Ǝ/2/2016 14:20', 3], [ཆ/15/2015 16:38', 17], [Ə/26/2015 23:23', 1],
    [Ɗ/22/2016 12:24', 4], [ཇ/16/2015 9:22', 1], [ƈ/24/2016 17:57', 1], 
    [ƌ/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


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

например:

dict1 = {}

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

hour, mins = p[1].split(":") # -> [Ə', ཱི']

dict1[hour] = # value

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


3 способа:

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

import re

dt = Ǝ/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 = Ǝ/16/2016 9:55'
date, time = dt.split(' ')
hours, minutes = time.split(':')

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

from datetime import datetime

res = datetime.strptime(Ǝ/16/2016 9:55', '%m/%d/%Y %H:%M')
print(res.time().hour)

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

from time import strptime

dict1 = {}
list1 = [[Ǝ/16/2016 9:55', 6], [ཇ/22/2015 13:43', 29], [Ƌ/2/2016 10:14', 1],
    [Ǝ/2/2016 14:20', 3], [ཆ/15/2015 16:38', 17], [Ə/26/2015 23:23', 1],
    [Ɗ/22/2016 12:24', 4], [ཇ/16/2015 9:22', 1], [ƈ/24/2016 17:57', 1], 
    [ƌ/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

Есть идеи?

10000