Список словарей в списки коррелированных словарей - PullRequest
0 голосов
/ 05 июля 2019

У меня есть этот список:

list = [ { 1: [3], 2: [6] }, { 3: [4,5], 6: [8] }, { 4: [7], 5: [7] } ]

Он представляет полную корреляцию между идентификаторами объектов для всех объектов, которые у меня есть.

Что я хочу извлечь из этого списка:

l1 = [ { 1: [3] }, { 3: [4,5] }, { 4: [7], 5: [7] } ]

l2 = [ { 2: [6] }, { 6: [8] } ]

Позвольте мне дать некоторые объяснения!

Для наглядности, пожалуйста, найдите изображение ниже:

enter image description here

Итак, как вы можете видеть, каждый объект представлен своим идентификатором. Чтобы сформировать «список», я начинаю с идентификаторов периферийных объектов слева, такими идентификаторами будут ключи первого словаря («списка»), значениями этих ключей являются идентификаторы объектов, подключенных к правильно (мы помещаем значение (я) в список). Эти значения будут ключами второго словаря (не повторяйте ключи, если вы повторили значения из предыдущего словаря, просто правый раз), и повторяйте такие шаги до достижения последних идентификаторов.

Эти объекты формируют шаблон (ы) в соответствии с отношением между их идентификаторами. В задаче мне будет дано количество шаблонов, которые они формируют. На картинке, на которую я дал ссылку, они образуют две структуры.

Шаблон: группа объектов, идентификаторы которых связаны друг с другом определенным образом

1 Ответ

0 голосов
/ 05 июля 2019

Это сработало для меня:

my_dict = [ { 1: [3], 2: [6] }, { 3: [4,5], 6: [8] }, { 4: [7], 5: [7] } ]
new_dict = []

# read
def read(n, p, dictionary):
  a = list(dictionary[n])[p]
  if len(new_dict)<=p:
    new_dict.append([])
  new_dict[p].append({a : dictionary[n][a]})
  bucle(dictionary[n][a], n+1, p, dictionary)
def bucle(key, n, p, dictionary):
  try:
    for keys in key:
      new_dict[p].append({keys: dictionary[n][keys]})
      bucle(dictionary[n][keys], n+1, p, dictionary)
  except:
    pass
read(0, 0, my_dict)
read(0, 1, my_dict)
print(new_dict)

результат:

new_dict = [[{1: [3]}, {3: [4, 5]}, {4: [7]}, {5: [7]}], [{2: [6]}, {6: [8]}]]
new_dict[0] = [{1: [3]}, {3: [4, 5]}, {4: [7]}, {5: [7]}]
new_dict[1] = [{2: [6]}, {6: [8]}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...