Python: asignación de índices de caracteres en la lista de strings

Dada una lista de strings, asigne cada carácter en strings, a los índices en que ocurre.

Entrada : test_list = [‘gf g’, ‘best’, ‘for’, ‘geek s’]
Salida : {‘g’: [1, 4], ‘f’: [1, 3], ‘s ‘: [2, 4], ‘b’: [2], ‘e’: [2, 4], ‘t’: [2], ‘o’: [3], ‘r’: [3], ‘k’: [4]}
Explicación : Caracteres mapeados con sus índices de elementos que ocurren.

Entrada : test_list = [‘gf g’, ‘i s’, ‘best t’, ‘for’, ‘geek s’]
Salida : {‘g’: [1, 5], ‘f’: [1, 4], ‘i’: [2], ‘s’: [2, 3, 5], ‘b’: [3], ‘e’: [3, 5], ‘t’: [3], ‘ o’: [4], ‘r’: [4], ‘k’: [5]}
Explicación : Caracteres mapeados con sus índices de elementos que ocurren.

Método n.º 1: Usar predeterminadodict() + enumerar() + dividir()

La combinación de las funciones anteriores se puede utilizar para resolver este problema. En esto, usamos defaultdict() para obtener una lista vacía para almacenar índices, enumerate() se usa para verificar índices y split() se puede usar para dividir caracteres. 

Python3

# Python3 code to demonstrate working of 
# Charatacter indices Mapping in String List
# Using defaultdict() + enumerate() + split()
from collections import defaultdict
  
# initializing list
test_list = ['g f g', 'i s', 'b e s t', 'f o r', 'g e e k s'] 
  
# printing original list
print("The original list is : " + str(test_list))
  
res = defaultdict(set)
  
# loop for assigning indices
for idx, ele in enumerate(test_list):
    for sub in ele.split():
        res[sub].add(idx + 1)
  
# dictionary comprehension to remake result 
res = {key: list(val) for key, val in res.items()}
  
# printing result 
print("The mapped dictionary : " + str(res))
Producción

The original list is : ['g f g', 'i s', 'b e s t', 'f o r', 'g e e k s']
The mapped dictionary : {'g': [1, 5], 'f': [1, 4], 'i': [2], 's': [2, 3, 5], 'b': [3], 'e': [3, 5], 't': [3], 'o': [4], 'r': [4], 'k': [5]}

Método #2: Usar enumerate() + comprensión de diccionario

Esta es otra forma en la que se puede realizar esta tarea. Esto realiza la tarea de manera similar, solo en una línea en la comprensión del diccionario.

Python3

# Python3 code to demonstrate working of 
# Charatacter indices Mapping in String List
# Using enumerate() + dictionary comprehension
  
# initializing list
test_list = ['g f g', 'i s', 'b e s t', 'f o r', 'g e e k s'] 
  
# printing original list
print("The original list is : " + str(test_list))
  
# using dictionary comprehension to bind result
res = {sub : [key + 1 for key, val in enumerate(test_list) if sub in val] 
       for ele in test_list for sub in ele.split()}
  
# printing result 
print("The mapped dictionary : " + str(res))
Producción

The original list is : ['g f g', 'i s', 'b e s t', 'f o r', 'g e e k s']
The mapped dictionary : {'g': [1, 5], 'f': [1, 4], 'i': [2], 's': [2, 3, 5], 'b': [3], 'e': [3, 5], 't': [3], 'o': [4], 'r': [4], 'k': [5]}

Publicación traducida automáticamente

Artículo escrito por manjeet_04 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *