Dada una lista que contiene todos los elementos y una segunda lista de tuplas que representan la relación entre los índices, la tarea es generar un diccionario que muestre la relación de cada elemento de la primera lista con todos los demás elementos de la lista.
Este tipo de problemas se encuentran a menudo en la competencia de codificación.
A continuación se presentan algunas formas de lograr la tarea anterior.
Input: indices = ['x','y','z','w','t','r'] relation =[('x', 'y'), ('x', 'z'), ('x', 'w'), ('y', 'z'), ('y', 'w'), ('z', 'w')] Output: {'x': ['y', 'z', 'w'], 'y': ['x', 'z', 'w'], 'z': ['x', 'y', 'w'], 'w': ['x', 'y', 'z'], 't': [], 'r': []}
Método #1: Usar la iteración es la forma más fácil de resolver cualquier tarea
#Python code to convert list of tuple into dictionary showing #relation of every element from first list to every other element in the list. #List initialization indices = ['x','y','z','w','t','r'] relation =[('x', 'y'), ('x', 'z'), ('x', 'w'), ('y', 'z'), ('y', 'w'), ('z', 'w')] #dictionary initialization Output = {} #Iteration for elem in indices: temp= [] for rel in relation: if elem in rel: if elem == rel[0]: temp.append(rel[1]) else: temp.append(rel[0]) Output[elem] = temp temp = [] print("Initial list of tuple is :") print(relation) print("Converted dictionary of list :") print(Output)
Output : Initial list of tuple is : [('x', 'y'), ('x', 'z'), ('x', 'w'), ('y', 'z'), ('y', 'w'), ('z', 'w')] Converted dictionary of list : {'w': ['x', 'y', 'z'], 'r': [], 'x': ['y', 'z', 'w'], 't': [], 'y': ['x', 'z', 'w'], 'z': ['x', 'y', 'w']}
Método #2: Usar networkx es la forma más simple y corta
de convertir una lista de tuplas en un diccionario
#Python code to convert list of tuple into dictionary showing #relation of every element from first list to every other element in the list. #Importing import networkx as nx #List initialization indices = ['x','y','z','w','t','r'] relation =[('x', 'y'), ('x', 'z'), ('x', 'w'), ('y', 'z'), ('y', 'w'), ('z', 'w')] #dictionary initialization Output = {} #Using networkx to solve temp=nx.Graph(relation) temp.add_nodes_from(indices) Output = nx.to_dict_of_lists(temp) #Printing print("Initial list of tuple is :") print(relation) print("Converted dictionary of list :") print(Output)
Output : Initial list of tuple is : [('x', 'y'), ('x', 'z'), ('x', 'w'), ('y', 'z'), ('y', 'w'), ('z', 'w')] Converted dictionary of list : {'w': ['x', 'y', 'z'], 'r': [], 'x': ['y', 'z', 'w'], 't': [], 'y': ['x', 'z', 'w'], 'z': ['x', 'y', 'w']}
Método #3: Usar itertools y groupby es otra forma de convertir una lista de tuplas en un diccionario.
#Python code to convert list of tuple into dictionary showing #relation of every element from first list to every other element in the list. #Importing from itertools import groupby from operator import itemgetter #List initialization indices = ['x','y','z','w','t','r'] relation =[('x', 'y'), ('x', 'z'), ('x', 'w'), ('y', 'z'), ('y', 'w'), ('z', 'w')] #Using itertools.groupby and maps edge = relation + [tuple(reversed(pair)) for pair in relation] st = itemgetter(0) end = itemgetter(1) groups = groupby(sorted(edge), key=st) mapping = {vertex: list(map(end, edges)) for vertex, edges in groups} from collections import defaultdict #Output list Output = defaultdict(list, mapping) Output = dict(mapping) Output.update({vertex: [] for vertex in indices if vertex not in mapping}) #Printing print("Initial list of tuple is :") print(relation) print("Converted dictionary of list :") print(Output)
Output : Initial list of tuple is : [('x', 'y'), ('x', 'z'), ('x', 'w'), ('y', 'z'), ('y', 'w'), ('z', 'w')] Converted dictionary of list : {'w': ['x', 'y', 'z'], 'r': [], 'x': ['y', 'z', 'w'], 't': [], 'y': ['x', 'z', 'w'], 'z': ['x', 'y', 'w']}
Publicación traducida automáticamente
Artículo escrito por everythingispossible y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA