Сейчас моя база данных JSON выглядит так:
[{'srcStationName': 'Central', 'srcStationID': 1, 'dstName': 'Central',
'dstID': 1, 'octopusAdultFare': 0, 'octopusStudentFare': 0,
'singleAdultFare': 0, 'octopusChildFare': 0, 'octopusElderlyFare': 0,
'octopusDisabledFare': 0, 'singleChildFare': 0, 'singleElderlyFare': 0},
{'srcStationName': 'Central', 'srcStationID': 1, 'dstName': 'Admiralty',
'dstID': 2, 'octopusAdultFare': 4.6, 'octopusStudentFare': 3,
'singleAdultFare': 5, 'octopusChildFare': 3, 'octopusElderlyFare': 2,
'octopusDisabledFare': 2, 'singleChildFare': 3, 'singleElderlyFare': 3},
{'srcStationName': 'Central', 'srcStationID': 1, 'dstName': 'Tsim Sha Tsui',
'dstID': 3, 'octopusAdultFare': 10, 'octopusStudentFare': 5,
'singleAdultFare': 11, 'octopusChildFare': 5, 'octopusElderlyFare': 2,
'octopusDisabledFare': 2, 'singleChildFare': 5, 'singleElderlyFare': 5},
{'srcStationName': 'Heng On', 'srcStationID': 101, 'dstName': 'Fortress
Hill', 'dstID': 30, 'octopusAdultFare': 21.5, 'octopusStudentFare': 10.7,
'singleAdultFare': 24, 'octopusChildFare': 10.7, 'octopusElderlyFare': 2,
'octopusDisabledFare': 2, 'singleChildFare': 12, 'singleElderlyFare': 12},
{'srcStationName': 'Heng On', 'srcStationID': 101, 'dstName': 'North Point',
'dstID': 31, 'octopusAdultFare': 21.5, 'octopusStudentFare': 10.7,
'singleAdultFare': 24, 'octopusChildFare': 10.7, 'octopusElderlyFare': 2,
'octopusDisabledFare': 2, 'singleChildFare': 12, 'singleElderlyFare': 12},
{'srcStationName': 'Heng On', 'srcStationID': 101, 'dstName': 'Quarry Bay',
'dstID': 32, 'octopusAdultFare': 21.5, 'octopusStudentFare': 10.7,
'singleAdultFare': 24, 'octopusChildFare': 10.7, 'octopusElderlyFare': 2,
'octopusDisabledFare': 2, 'singleChildFare': 12, 'singleElderlyFare': 12}]
Поскольку существуют одни и те же «srcStations» и несколько «назначений», желаемый результат - я хочу преобразовать в формат, как показано ниже:
{1: {1: {'octopusAdultFare': 0, 'octopusStudentFare': 0, 'octopusChildFare':
0, 'octopusElderlyFare': 0, 'octopusDisabledFare': 0, 'singleAdultFare': 0,
'singleChildFare': 0, 'singleElderlyFare': 0}, 2: {'octopusAdultFare': 4.6,
'octopusStudentFare': 3, 'octopusChildFare': 3, 'octopusElderlyFare': 2,
'octopusDisabledFare': 2, 'singleAdultFare': 5, 'singleChildFare': 3,
'singleElderlyFare': 3}, 3: {'octopusAdultFare': 10, 'octopusStudentFare':
5, 'octopusChildFare': 5, 'octopusElderlyFare': 2, 'octopusDisabledFare': 2,
'singleAdultFare': 11, 'singleChildFare': 5, 'singleElderlyFare': 5},
101: {1: {'octopusAdultFare': 21.5, 'octopusStudentFare': 10.7
'octopusChildFare': 10.7, 'octopusElderlyFare': 2, 'octopusDisabledFare':
2, 'singleAdultFare': 24, 'singleChildFare': 12, 'singleElderlyFare': 12},
2: {'octopusAdultFare': 21.5, 'octopusStudentFare': 10.7, 'octopusChildFare':
10.7, 'octopusElderlyFare': 2, 'octopusDisabledFare': 2,
'singleAdultFare': 24, 'singleChildFare': 12, 'singleElderlyFare': 12}, 3: {'octopusAdultFare':
21.5, 'octopusStudentFare': 10.7, 'octopusChildFare': 10.7,
'octopusElderlyFare': 2, 'octopusDisabledFare': 2, 'singleAdultFare':
24, 'singleChildFare': 12, 'singleElderlyFare': 12}
}
Где первая цифра «1» и ключ «101» - это «srcStationID», а соответствующий объект содержит «dstID» в качестве ключей и их цены. Мне нужна помощь в написании функции на Python, которая выполнит это преобразование за меня и запишет результат в файл JSON. Спасибо.
Похоже, вы пытаетесь наложить реляционную логику поверх нереляционной базы данных. В противном случае вы почти всегда добьетесь лучших результатов.






Мне удалось это сделать с помощью следующего кода:
newData = []
entities = {}
for entity in data:
if not entity['srcStationID'] in entities:
entities[entity['srcStationID']] = {
entity['dstID'] : {
'octopusAdultFare' : entity.get('octopusAdultFare'),
'octopusStudentFare' : entity.get('octopusStudentFare'),
'octopusChildFare' : entity.get('octopusChildFare'),
'octopusElderlyFare' : entity.get('octopusElderlyFare'),
'octopusDisabledFare' : entity.get('octopusDisabledFare'),
'singleAdultFare' : entity.get('singleAdultFare'),
'singleChildFare' : entity.get('singleChildFare'),
'singleElderlyFare' : entity.get('singleElderlyFare')
}
}
else:
entities[entity['srcStationID']][entity['dstID']] = {
'octopusAdultFare' : entity.get('octopusAdultFare'),
'octopusStudentFare' : entity.get('octopusStudentFare'),
'octopusChildFare' : entity.get('octopusChildFare'),
'octopusElderlyFare' : entity.get('octopusElderlyFare'),
'octopusDisabledFare' : entity.get('octopusDisabledFare'),
'singleAdultFare' : entity.get('singleAdultFare'),
'singleChildFare' : entity.get('singleChildFare'),
'singleElderlyFare' : entity.get('singleElderlyFare')
}
Можете ли вы сами продемонстрировать усилия любой в решении этой проблемы?