Как объединить значения ключей двух файлов JSON и сохранить уникальность избыточных объектов [дубликат]Python

Программы на Python
Anonymous
Как объединить значения ключей двух файлов JSON и сохранить уникальность избыточных объектов [дубликат]

Сообщение Anonymous »

У меня есть два файла json с набором общих объектов {"sample": {"id": "NA12878"}, "wgs_metrics":. Я хочу объединить их вместе и сохранить избыточные объекты, используя Python или JQ (unique_by). Заранее спасибо!
Вклад
File1.json
{
"biosample": {
"id": "NA12878"
},
"wgs_metrics": {
"insert_size_std_deviation": "98.2",
"pct_reads_mapped": "99.63",
"pct_reads_properly_paired": "97.9",
"yield_bp_q30": "1996315"
}
}

File2.json
{
"biosample": {
"id": "NA12878"
},
"wgs_metrics": {
"pass_indel_het_hom": 1.49,
"pass_snp_het_hom": 1.05,
"pass_snp_ts_tv": 2.13,
"pass_snps": 8489
}
}

Ожидаемый результат
{
"biosample": {
"id": "NA12878"
},
"wgs_metrics": {
"insert_size_std_deviation": "98.2",
"pct_reads_mapped": "99.63",
"pct_reads_properly_paired": "97.9",
"yield_bp_q30": "1996315",
"pass_indel_het_hom": 1.49,
"pass_snp_het_hom": 1.05,
"pass_snp_ts_tv": 2.13,
"pass_snps": 8489
}
}

Следующий код переопределяет файл1, удаляя избыточные объекты.
Try1 — Python
with open("variant_counts.json", 'r') as f1:
data1 = json.load(f1)

with open("NA12878-chr14-AKT1.variant.metrics.json", 'r') as f2:
data2 = json.load(f2)

#combined_data = data1 + data2
#unique_data = [dict(t) for t in {tuple(d.items()) for d in combined_data}]

merged_data = {**data1, **data2}

with open('mergeed_files.json', "w") as mf:
json.dump(merged_data, mf, indent=4)
#json.dump(unique_data, mf, indent=4)
mf.write("\n")

Попытка2 — jq
jq 'unique_by([.biosample, .id, .wgs_metrics])' file1.json file2.json

код:
#!/usr/bin/env python3

import json

with open("file1.json", 'r') as f1:
data1 = json.load(f1)

with open("file2.json", 'r') as f2:
data2 = json.load(f2)

with open('merge.json', "w") as f:
json.dump({"biosample": data1["biosample"], "wgs_metrics": {**data1["wgs_metrics"], **data2["wgs_metrics"]}}, f, sort_keys=True, indent=4)
f.write("\n")

Обновил свой вопрос здесь, добавив дополнительные имена объектов aln_metrics иvariant_metrics в разделе wgs_metricsв json-файлах data1 и data2 . вариант_метрики:{} в data1 и aln_metrics: { во входных данных data2 всегда пусты.
Мне нужно объединить только aln_metrics data1 только с вариантом_метрики данных2 вместо всего wgs_metricsкак для данных1, так и для данных2, в котором выходные данные data2 записаны с пустым объектом aln_metrics: { переопределяют объект data1 aln_metrics ключевые значения с этим кодом...
json.dump({"biosample": data1["biosample"], "wgs_metrics": {**data1["wgs_metrics"], **data2["wgs_metrics"]}}, f, sort_keys=True, indent=4)
File1.json
{
"biosample": {
"id": "NA12878"
},
"wgs_qc_metrics": {
"aln_metrics": {
"insert_size_std_deviation": "98.2",
"mad_autosome_coverage": "0",
"mean_autosome_coverage": "0.00",
"mean_insert_size": "447.3",
"pct_autosomes_15x": "0.00",
"pct_reads_mapped": "99.63",
"pct_reads_properly_paired": "97.9",
"yield_bp_q30": "1996315"
},
"variant_metrics": {}
}
}

File2.json
{
"biosample": {
"id": "NA12878-chr14-AKT1"
},
"wgs_qc_metrics": {
"aln_metrics": {},
"variant_metrics": {
"count_deletions": 848,
"count_insertions": 850,
"count_snvs": 8489,
"ratio_heterozygous_homzygous_indel": 1.49,
"ratio_heterozygous_homzygous_snv": 1.05,
"ratio_insertion_deletion": 1.0,
"ratio_transitions_transversions_snv": 2.13
}
}
}

Ожидаемый результат
{
"biosample": {
"id": "NA12878"
},
"wgs_qc_metrics": {
"aln_metrics": {
"insert_size_std_deviation": "98.2",
"mad_autosome_coverage": "0",
"mean_autosome_coverage": "0.00",
"mean_insert_size": "447.3",
"pct_autosomes_15x": "0.00",
"pct_reads_mapped": "99.63",
"pct_reads_properly_paired": "97.9",
"yield_bp_q30": "1996315"
},
"variant_metrics": {
"count_deletions": 848,
"count_insertions": 850,
"count_snvs": 8489,
"ratio_heterozygous_homzygous_indel": 1.49,
"ratio_heterozygous_homzygous_snv": 1.05,
"ratio_insertion_deletion": 1.0,
"ratio_transitions_transversions_snv": 2.13
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/789 ... cts-unique

Вернуться в «Python»