Iteración del diccionario de Python

Tengo un diccionario dict2 que quiero recorrer y eliminar todas las entradas que contienen 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']}