Получение значений, не равных значениям, из вложенного словаря

#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. Большое спасибо. Это прекрасно работает !