@zasara

Как делать перекрестное сравнение?

Есть 2 json файла, значения которых нужно сравнить

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

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

        }
    ]
]


file2.json
[
    {
            "key1": "RAP",
            "key2": "14"
    },
    {
            "key1": "KARA",
            "key2": "7"

    }
]


Нужно перебрать файлы и значения ключа key1 и если они равны, сравнить. Я сделал следующий код:
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][0]['key1'] == elem2[0]['key1']:
                print(float(elem[0][0]['key2']) - float(elem2[0]['key2']))


В результате должны сравниваться значения KARA (10 - 7)
Но выдает следующую ошибку:
if elem[0][0]['key1'] == elem2[0]['key1']:
KeyError: 0


Что не так?
  • Вопрос задан
  • 597 просмотров
Пригласить эксперта
Ответы на вопрос 1
@dmshar
Напоминаю, в словаре ключи не упорядочены.
Ваш elem - это список, первый и единственный элемент которого при первом проходе цикла равен [{'key1': 'KARA', 'key2': '10'}]. Идем дальше. elem[0] - это уже словарь {'key1': 'KARA', 'key2': '10'}. У которого не может быть элемента elem[0][0]. Вот и получаете заслуженную ошибку.
Аналогичный анализ для json2 надеюсь вам самостоятельно провести труда не составит.
Все это прекрасно видно в менеджере переменных, умение пользоваться которым - один из основных навыков при проведении отладки любой программы.
Совет выучить структуры Python перед тем как писать программы с ними - вам коллеги уже дали раньше. На постоянных подсказках - программирование не выучить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы