Перекрестное сравнение значений json файлов

ratata

Новичок
Пользователь
Дек 29, 2021
37
1
8
Есть 2 json файла, значения которых нужно сравнить

file1.json
Код:
[
    [
        {
            "key1": "KARA",
            "key2": "10"
        } 
    ],
    [
        {

            "key1": "SARA",
            "key2": "23"

        }
    ]
]

file2.json
Код:
[
    [
        {
            "key1": "ROCK",
            "key2": "2"
        } 
    ],
    [
        {

            "key1": "KARA",
            "key2": "20"

        }
    ]
]

Если значения ключа "key1" совпадают, то должно делаться вычитание значений ключа "key2".
То есть в данном случае в первом файле KARA будет сравниваться со вторым файлом и его значением KARA: 10 - 20

Я написал следующее, но в терминал выдает None, так как элементы идут не по порядку
Код:
with open('file1.json') as f, open('file2.json') as f2:
    json1 = json.load(f)
    json2 = json.load(f2)

    if json1[0]['key1'] == json2[0]['key1']:
        float1 = float(json1[0]['key2'])
        float2 = float(json2[0]['key2'])
        # делаем разницу
        print(float1 - float2)

Подскажите пожалуйста, как сравнивать значения, если совпадающие значения ключей идут не по порядку?
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Подскажите пожалуйста, как сравнивать значения, если совпадающие значения ключей идут не по порядку?
Перебирать значения в цикле и сравнивать:
Python:
import json


with open('file1.json') as f, open('file2.json') as f2:
    json1 = json.load(f)
    json2 = json.load(f2)

    for elem in json1:
        for elem2 in json2:
            if elem[0]['key1'] == elem2[0]['key1']:
                print(float(elem[0]['key2']) - float(elem2[0]['key2'])) # -10.0
 

ratata

Новичок
Пользователь
Дек 29, 2021
37
1
8
Перебирать значения в цикле и сравнивать:
Python:
import json


with open('file1.json') as f, open('file2.json') as f2:
    json1 = json.load(f)
    json2 = json.load(f2)

    for elem in json1:
        for elem2 in json2:
            if elem[0]['key1'] == elem2[0]['key1']:
                print(float(elem[0]['key2']) - float(elem2[0]['key2'])) # -10.0
Выдает такую ошибку:
if elem[0]['key1'] == elem2[0]['key1']:
KeyError: 0
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Выдает такую ошибку:
if elem[0]['key1'] == elem2[0]['key1']:
KeyError: 0
С файлами, которые вы привели выше код работает. Для других файлов нужно переделывать код в зависимости от структуры файлов.
 

Форум IT Специалистов