Python | Actualizar una lista de tuplas usando otra lista

Dadas dos listas de tuplas, escriba un programa Python para actualizar ‘list1’ de acuerdo con ‘list2’ y devuelva una lista actualizada.

Ejemplos:

Input : list1 = [('x', 0), ('y', 5)]
        list2 = [('x', 100), ('y', 200)]
Output : [('x', 100), ('y', 200)]

Input : list1 = [('a', 0), ('b', 0), ('c', 0)]
        list2 = [('a', 1), ('b', 2)]
Output :[('a', 1), ('b', 2), ('c', 0)]

 
Enfoque #1 Pythonic Naive
Este es un enfoque Pythonic ingenuo. Simplemente convertimos la lista de tuplas en un diccionario y la actualizamos con list2 y volvemos a convertir el diccionario en lista.

# Python3 code to Update a list 
# of tuples according to another list
  
def merge(list1, list2): 
    dic = dict(list1)
    dic.update(dict(list2))
    return list(dic.items())
  
# Driver Code
list1 = [('a', 0), ('b', 0), ('c', 0)]
list2 = [('a', 5), ('c', 3)]
print(merge(list1, list2))
Producción:

[('a', 5), ('b', 0), ('c', 3)]

 
Enfoque #2 Usar el módulo de colecciones Python defaultdict proporciona el método defaultdict() que se usa en este enfoque. Primero inicializamos ‘dic’ con el método defaultdict pasando la lista como fábrica. Use un ciclo para agregar el elemento izquierdo de cada tupla como clave y el elemento derecho de cada tupla como valor para ambas listas. Ahora simplemente use la función ordenada y produzca la lista de tal manera que para cada clave única mantenga el valor máximo del elemento correcto de la tupla.

# Python3 code to Update a list 
# of tuples according to another list
  
from collections import defaultdict
  
def merge(list1, list2): 
    dic = defaultdict(list)
    for i, j in list1 + list2:
        dic[i].append(j)
          
    return sorted([(i, max(j)) for i, j in dic.items()],
    key = lambda x:x[0])
  
# Driver Code
list1 = [('a', 0), ('b', 0), ('c', 0)]
list2 = [('a', 5), ('c', 3)]
print(merge(list1, list2))
Producción:

[('a', 5), ('b', 0), ('c', 3)]

Publicación traducida automáticamente

Artículo escrito por Smitha Dinesh Semwal 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 *