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))
[('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))
[('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