У меня есть список (пример показан ниже). Как извлечь час из 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