Вы хотите сгруппировать по местоположению, поэтому я предлагаю вам нацелиться на этот формат, который проще визуализировать, а затем попытаться построить вывод таблицы оттуда (для каждого города, для каждого времени, часа печати и людей / hr)
[
{'location' : 'Liberty City', 'times': [{'hour' : '7:00', 'people' : 116}, ...]},
...
]
При работе практически с любой базой данных попытайтесь создать класс для объекта (строка, таблица, сегмент, отношение (вставьте здесь термин базы данных) и т. д. c). Затем вы можете изолировать logi c здесь, вместо того, чтобы загромождать основную функцию
class Location:
def __init__(self, name):
self.name = name
self.times = list()
def __str__(self):
s = ['{}\t{}\t{}'.format(k, t[k], self.name) for t in self.times for k in t.keys()]
return '\n'.join(s)
def add_time(self, hour, people):
existing_people_for_hour = None
for t in self.times: # loop existing times, looking for the hour
existing_people_for_hour = t.get(hour)
if existing_people_for_hour is not None:
t[hour] += people
break # found the hour to update, so break the loop
if existing_people_for_hour is None: # if the hour was never found, add to the times list
self.times.append({hour : people})
Имея это в наличии, используйте словарь для группировки значений местоположения, и вы сможете распечатать их в конце
locations = dict()
for d in myData:
# parse each value out
hour = d['time'][:2] + ':00'
p = int(d['no_of_people'])
loc = d['location']
# get the location from the map, if exists, else create new one
l = locations.get(loc, Location(loc))
l.add_time(hour, p) # add the people for the time
locations[loc] = l # upsert the new location
for l in locations.values():
print(l)
Выход
07:00 95 Liberty City
08:00 21 Liberty City
07:00 70 San Andreas
08:00 30 San Andreas