Контекст: Я сгенерировал график networkx
с различными остановками транспорта. Единственные атрибуты, которые имеет каждая остановочная станция, это их позиции id
, name
, lon
и lat
.
Я хочу добавить другие атрибуты к каждой точке, эти атрибуты находятся в 3 файлах CSV. который я открыл как dicts
: (я значительно упростил их для облегчения чтения):
stops_csv = DictReader(open(STOPS_FILE,'r'))
Dict2 = dict()
for stop in stops_csv:
Dict2[stop['stop_id']] = stop
Dict2: ### Dict gotten from the nx graph.
{'stop1': OrderedDict([('stop_id', 'stop1'),
('stop_name', 'name1'),
('lat', 'lat1'),
('lon', 'lon1')]),
'stop2': OrderedDict([('stop_id', 'stop2'),
('stop_name', 'name2'),
('lat', 'lat2'),
('lon', 'lon2')]), ...}
Dict1: ### Dict that links Dict2 and Dict3.
{'stop1': OrderedDict([('trip_id', 'trip1'),
('t1', '01:43:00'),
('t2', '01:43:00')]),
'stop2': OrderedDict([('trip_id', 'trip2'),
('t1', '18:14:00'),
('t2', '18:14:00')]), ...}
Dict3: ### Dict containing trip_id and route_id.
{'trip1': OrderedDict([('route_id', 'route1'),
('trip_id', 'trip1'),
('direction_id', '0')]),
'trip2': OrderedDict([('route_id', 'route2'),
('trip_id', 'trip2'),
('direction_id', '0')]), ...}
Я хотел бы связать Dict1
, Dict2
и Dict3
в одномвыровнял dict
, который я планирую использовать в nx.set_node_attributes()
позже.
Для каждого stop_id Dict2
я хотел бы добавить каждый trip_id
соответствующий, который находится в Dict3
. И затем, для каждого trip_id
ранее добавленного, я хотел бы добавить каждый route_id
соответствующий, который также находится в Dict3
.
Мои проблемы следующие:
- Я не могу накапливать значения с одинаковым ключом вместо их замены. Я попробовал то, что было предложено в этом посте , но не смог заставить его работать. Поэтому я попробовал другой подход, и ниже это то, что я сделал до сих пор. По сути, для каждого
stop_id
есть один или несколько trip_id
, соответствующих, однако я получаю только самое последнее trip_id
значение.
test_dict = dict()
for s in Dict2: # 's' stands for stop.
test_dict['{}'.format(s)] = {}
for t in Dict3: # 't' stands for trip.
test_dict['{}'.format(s)]['trip_id'] = t
print(test_dict)
>>> {'stop1': {'trip_id': 'tripn'}, #'tripn' corresponds to the last trip_id value.
'stop2': {'trip_id': 'tripn'},
'stop3': {'trip_id': 'tripn'},
'stop4': {'trip_id': 'tripn'},
'stop5': {'trip_id': 'tripn'}, ...}
- Кроме того, один изСамая большая проблема, с которой я столкнулся, это
route_id
- не ключ, а значение Dict3
, и я понятия не имею, как мне поступить. Так что любые указания здесь будут очень полезны ...
Результат должен выглядеть следующим образом:
{stop1
trip1
route1
trip2
route1
stop2
trip3
route1
trip4
route1
trip5
route2
...}
Я знаю, что не логично иметь trip_id
до route_id
, но я не буду работать с ним так же, как trip_id
, поэтому этот результат должен облегчить мою будущую работу в теории.
Я просмотрел много постов о создании вложенных словарей с pythonи особенно этот , который входит в многоуровневую диктовку, но я все еще не мог найти решение своей проблемы, поэтому я здесь.
Я всегда мог открыть 3 csv
как dataframes
, merge
их, а затем сделать из них желаемое dict
, но я тоже не знаю, как это сделать.