Python: сравнение двух словарей для определения соответствия двух отдельных значений - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть два массива словарей, и я пытаюсь проверить, точно ли два значения соответствуют значениям другого словаря, по каждому значению, а затем вернуть значение только этого значения и только один раз , Метод, который я попробовал, дал результаты, намного превосходящие исходный массив. Пример ниже.

first = [{“num1”: 1, “num2”: 2}, {“num1”: 1, “num2”: 3}, {“num1”: 1, “num2”: 4}, {“num1”: 2, “num2”: 5}]

second = [{“num1”: 1, “num2”: 7, “num3”: 10}, {“num1”: 1, “num2”: 3, “num3”: 8}, {“num1”: 3, “num2”: 4, “num3”: 5}, {“num1”: 1, “num2”: 2, “num3”: 5}, {“num1”: 2, “num2”: 5, “num3”: 11}, {“num1”: 1, “num2”: 8, “num3”: 9}]

Вот как выглядят массивы. Я пытаюсь проверить, соответствуют ли значения второго массива обоим элементам первого массива независимо от их положения, а затем добавить всю эту запись из второго массива в новый массив. Итак, после запуска будет создан новый массив, содержащий 2-ю, 4-ю и 5-ю записи из второго массива.

Я попробовал следующее:

for item in first:
    for entry in second:
        if item[“num1”] == entry[“num1”]:
            if item[“num2”] == entry[“num2”]:
                new_array.insert(len(new_array), entry)
            if item[“num2”] == entry[“num3”]:
                new_array.insert(len(new_array), entry)
        if item[“num1”] == entry[“num2”]:
            if item[“num2”] == entry[“num3”]:
                new_array.insert(len(new_array), entry)

Однако, когда я запускаю это, я получаю массивный массив, намного больше, чем исходный массив. Затем я удалил все повторяющиеся значения и обнаружил, что он был того же размера, что и исходный второй словарь, поэтому он просто без разбора копировал каждую запись.

Что я делаю не так?

1 Ответ

0 голосов
/ 27 февраля 2020

Надеюсь, я вас правильно понял. Вот решение.

    first = [
    {"num1": 1, "num2": 2}, 
    {"num1": 1, "num2": 3}, 
    {"num1": 1, "num2": 4}, 
    {"num1": 2, "num2": 5}
]

second = [
    {"num1": 1, "num2": 7, "num3": 10},
    {"num1": 1, "num2": 3, "num3": 8},
    {"num1": 3, "num2": 4, "num3": 5},
    {"num1": 1, "num2": 2, "num3": 5},
    {"num1": 2, "num2": 5, "num3": 11}, 
    {"num1": 1, "num2": 8, "num3": 9}
]


for s in second:
    s = list(s.values())
    for f in first:
        f = list(f.values())
        if f[0] in s and f[1] in s:
            print(s)

Код проверит, присутствуют ли оба значения во втором словаре и в первом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...