@domanskiy

Как в главном словаре Python сравнить между собой вложенные в него словари?

Как в словаре Python сравнить между собой вложенные словари?
Есть как пример словарь:
{1: {'File': 'Fail-205001.pdf', 'Angle': '0', 'Quantity': 5}, 2: {'File': 'Fail-200001.pdf', 'Angle': '0', 'Quantity': 5}, 3: {'File': 'Fail-205001.pdf', 'Angle': '180', 'Quantity': 5}, 4: {'File': 'Fail-200001.pdf', 'Angle': '90', 'Quantity': 5}}


Мне нужно сравнить между собой вложенные в словарь словари 1, 2, 3 и т.д. (число от 1 хх)
сравнить по ключам File и Angle
И если они все одинаковые - то вывести True

Я знаю как списки проверять на одинаковые значения. Можно конечно сделать списки File и Angle, затем прогнать их через for key, group in groupby()
Но может есть более простое и элегантное решение?
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
aRegius
@aRegius
Python Enthusiast
Можете сложить значения соответствующих ключей в set и проверить его длину - если значения одинаковы, то она будет равна 1, в противном случае - больше 1:
target_keys = ('File', 'Angle')

# если должны быть одинаковы значения ВСЕХ target_keys соответственно
all(len({your_dict[key][i] for key in your_dict}) == 1 for i in target_keys)

# если должны быть одинаковы значения ЛЮБОГО ОДНОГО ИЗ target_keys
any(len({your_dict[key][i] for key in your_dict}) == 1 for i in target_keys)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
JRazor
@JRazor
Senior StarkOverFlow Programmer
Я знаю как списки проверять на одинаковые значения.

А как сделать из словаря список, подсказать?

Достаточно просто взять нужные значения
values = [(d['File'], d['Angle']) for d in dictionary.values()]

И сравнить с первым элементом списка
all(f == values[0][0] and a == values[0][1] for f, a in values)
Ответ написан
@dmtrrr
Backend developer
reduce(lambda x, y: x == y, list(map(lambda x: (x["File"], x["Angle"]), d.values())))
Ответ написан
Ваш ответ на вопрос

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

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