usar resueltos listas lista elementos ejercicios diccionarios diccionario desempaquetar dentro convertir agregar python dictionary

resueltos - Iteración del diccionario de Python



listas en python (2)

Tengo un diccionario dict2 que quiero recorrer y eliminar todas las entradas que contengan ciertos números de identificación en idlist . dict2[x] es una lista de listas (vea el ejemplo dict2 a continuación). Este es el código que he escrito hasta ahora, sin embargo, no elimina todas las instancias de los ID ( entry[1] ) que están en la lista de idlist . ¿Alguna ayuda?

dict2 = {G1:[[A, ''123456'', C, D], [A, ''654321'', C, D], [A, ''456123'', C, D], [A, ''321654'', C, D]]} idlist = [''123456'',''456123'',''321654''] for x in dict2.keys(): for entry in dict2[x]: if entry[1] in idlist: dict2[x].remove(entry) if dict2[x] == []: del dict2[x]

dict2 debería terminar pareciéndose a esto:

dict2 = {G1:[[A, ''654321'', C, D]]}


¿Probar una versión más limpia tal vez?

for k in dict2.keys(): dict2[k] = [x for x in dict2[k] if x[1] not in idlist] if not dict2[k]: del dict2[k]


Un enfoque que usa conjuntos (tenga en cuenta que necesitaba cambiar sus variables A, B, C, etc. a cadenas y los números en su lista de identificación a números enteros reales; también esto solo funciona, si sus ID son únicas y no aparecen en otros ''campos''):

#!/usr/bin/env python # 2.6 <= python version < 3 original = { ''G1'' : [ [''A'', 123456, ''C'', ''D''], [''A'', 654321, ''C'', ''D''], [''A'', 456123, ''C'', ''D''], [''A'', 321654, ''C'', ''D''], ] } idlist = [123456, 456123, 321654] idset = set(idlist) filtered = dict() for key, value in original.items(): for quad in value: # decide membership on whether intersection is empty or not if not set(quad) & idset: try: filtered[key].append(quad) except KeyError: filtered[key] = quad print filtered # would print: # {''G1'': [''A'', 654321, ''C'', ''D'']}