#python #dictionary
Вопрос:
У меня есть такой вложенный словарь
my_dict = { 'ae15': {'selector1fpc0': {'12': ' 3b1874ee5465656256079d02a301acf5'}, 'selector1fpc1': {'12': ' 3b1874ee5465656256079d02a301acf5'}, 'selector1fpc10': {'12': ' 3b1874ee5465656256079d02a301acf5'}, 'selector1fpc4': {'12': ' 3b1874ee5465656256079d02a301acf5'}, 'selector1fpc5': {'12': ' de80451ee5a9e5d69f243a42f1e72d1f'}, 'selector1fpc7': {'12': ' 3b1874ee5465656256079d02a301acf5'}, 'selector1fpc8': {'12': ' 3b1874ee5465656256079d02a301acf5'}, 'selector1fpc9': {'12': ' 3b1874ee5465656256079d02a301acf5'}}, 'ae16': {'selector1fpc0': {'7': ' 119a58e92e581d90eba9a57262d297e5'}, 'selector1fpc1': {'7': ' 119a58e92e581d90eba9a57262d297e5'}, 'selector1fpc10': {'8': ' 119a58e92e581d90eba9a57262d297e5'}, 'selector1fpc4': {'7': ' 119a58e92e581d90eba9a57262d297e5'}, 'selector1fpc5': {'7': ' 119a58e92e581d90eba9a57262d297e5'}, 'selector1fpc7': {'7': ' 119a58e92e581d90eba9a57262d297e5'}, 'selector1fpc8': {'7': ' 119a58e92e581d90eba9a57262d297e5'}, 'selector1fpc9': {'7': ' 119a58e92e581d90eba9a57262d297e5'}}}
и я хочу проверить, все ли внутренние значения dict равны
то есть
в ae15 значение selector1fpc5 отличается от остальных, однако в ae16 все значения идентичны
Я пытаюсь выполнить следующий код
for k, dic in my_dict.items(): print(dic.values()) iterable = iter(dic.values()) first = next(iterable) all_equals = all(first == val for val in iterable for k in dic.keys()) print(k,all_equals)
однако я получаю ложь в обоих случаях, когда на самом деле только ae195 имеет другое значение.
Комментарии:
1. Вы хотите сравнить ключ int и значение str или только значение str? т. е., если у вас было
{'12': ' 3b1874ee5465656256079d02a301acf5'}
, вы просто ищете значение'3b1874ee5465656256079d02a301acf5'
или{'12': ' 3b1874ee5465656256079d02a301acf5'}
.2. Если это позже, то в
ae16
одном из ключей8
, когда все остальные7
, следовательноall(first == val for val in iterable for k in dic.keys())
, вернутся ложными.
Ответ №1:
Вам нужно вложиться на один уровень глубже в другом месте:
from itertools import chain for k, dic in my_dict.items(): iterable = chain(*(d.values() for d in dic.values())) # to here ... first = next(iterable) all_equals = all(first == val for val in iterable) # ... from here! print(k, all_equals) ae15 False ae16 True
Комментарии:
1. Большое спасибо. Это прекрасно работает !