Ich möchte Gruppen basierend auf Wörterbuchschlüssel erstellen. Wenn der Schlüssel in mehr als einem Wörterbuch vorhanden ist, möchte ich eine Gruppe erstellen, die ich später verwenden kann. Ich bin fast gelungen, aber ich kann die gewünschte Leistung nicht erreichen. Wie Sie unten sehen können, gibt es zwei mögliche Gruppen. Das sind dct1 und dct3 (gleicher Schlüssel 18) und dct 2 und dct 4 (gleicher Schlüssel 8). Unten ist was ich bisher erstellt habe.Erstellen von Gruppen basierend auf dct.keys in Python
dct1 = {20: [(87, 6), (87, 7)],
21: [(68, 8)],
18: [(30, 7)],
11: [(27, 7), (28, 7)]}
dct2 = {8: [(41, 5), (41, 6), (41, 4)],
14: [(4, 7), (5, 7), (6, 7)],
16: [(58, 7), (56, 7), (57, 7)]}
dct3 = {4: [(41, 5), (41, 6), (41, 4)],
15: [(77, 7), (78, 7)],
18: [(29, 9), (29, 8)],
3: [(27, 7), (28, 7)]}
dct4 = {8: [(41, 5), (41, 6), (41, 4)],
30: [(6, 9), (5, 7), (7, 9)],
35: [(58, 7), (56, 7), (57, 7)]}
rwawl = [dct1, dct2, dct3, dct4]
def group_rooms(rectangles_with_adjacent_walls_list):
groups = []
for rectangle in rectangles_with_adjacent_walls_list:
adjacent_wall_list = rectangle.keys()
if not groups:
groups.append([adjacent_wall_list])
print adjacent_wall_list
new_group_threshold = len(adjacent_wall_list)
new_group = 0
for adjacent_wall in adjacent_wall_list:
for added_room in groups:
if adjacent_wall in added_room:
added_room.append(adjacent_wall_list)
break
else:
new_group += 1
if new_group == new_group_threshold:
groups.append([adjacent_wall_list])
print groups
return groups
created_groups = group_rooms(rwawl)
# MY OUTPUT:
# [[[18, 11, 20, 21]], [[18, 11, 20, 21]], [[18, 3, 4, 15]], [[8, 35, 30]]]
# DESIRED OUTPUT:
# [[[18, 11, 20, 21], [18, 3, 4, 15]], [[8, 16, 14], [8, 35, 30]]]
Wenn ein Schlüssel sagen 10 in allen dicts. Wie würde Ihre gewünschte Ausgabe aussehen? – kofrasa
Überprüft für Sie. Es erstellt eine Liste innerhalb der Liste und dann in einer weiteren Liste. – Hsin