#python #json #dictionary
Вопрос:
У меня есть файл json, подобный этому:
{
"PMID": {
"0": 31920716.0,
"1": 31915546.0,
"2": 31912059.0,
"3": 31908815.0
},
"ArticleTitle": {
"0": "Clinical Usefulness of Computational Modeling-Guided Persistent Atrial Fibrillation Ablation: Updated Outcome of Multicenter Randomized Study.",
"1": "Prevalence and Progression of Cognitive Impairment in Atrial Fibrillation Patients after Treatment with Catheter Ablation or Drug Therapy.",
"2": "Non traumatic spinal epidural haematoma.",
"3": "Twelve-month outcome in patients with stroke and atrial fibrillation not suitable to oral anticoagulant strategy: the WATCH-AF registry."
},
"Authors": {
"0": [
"Kim IS",
"Uhm JS",
],
"1": [
"Ortak J",
"Caglayan E"
],
"2": [
"Khalid NA",
"Shah N"
],
"3": [
"Nighoghossian N",
"Amarenco P"
]
}
}
и я хочу сгруппировать ценности таким образом:
{
"0": {
"PMID": 31920716.0,
"ArticleTitle": "Clinical Usefulness of Computational Modeling-Guided Persistent Atrial Fibrillation Ablation: Updated Outcome of Multicenter Randomized Study.",
"Authors" : [
"Kim IS",
"Uhm JS",
],
}
и так далее, по позиции в словаре, чтобы получить элемент со всеми сгруппированными индексами.
Есть ли функция для выполнения этой операции в Python?
Комментарии:
1. Я хотел бы напомнить всем, кто задает подобные вопросы о JSON, что на самом деле вопрос не обязательно должен касаться JSON-Вместо этого, как вы можете видеть в данном ответе, речь идет о манипулировании «собственными» структурами данных в Python, из которых JSON десериализуется/сериализуется. Удаление JSON из вопроса может помочь в будущем, когда вы начнете искать ответы 🙂
2.
{k: dict(i) for k, i in groupby(sorted(([n, i, k] for n, g in d.items() for k, i in g.items()), key=itemgetter(-1)), list.pop)}
groupby()
itemgetter()
Ответ №1:
Вы можете создать словарь и продолжать обновлять его в том порядке, в котором вам нравится . Следующий код объясняет это
def pack_ordinal(data):
result = dict()
for i in data:
for j in data[i]:
result[j] = result.get(j, dict())
result[j][i] = data[i][j]
return result
Комментарии:
1. Чаще всего выполняется итерация по парам ключ-значение:
for k, v in data.items()
,for k_i, v_i in v.items()
. Также вы можете использоватьdefaultdict
и обходить инициализацию dictresult = defaultdict(dict)
. Все вместе это сделает код немного чище (имхо) . Код .