cómo mantener la estructura del diccionario

Bueno, tengo el siguiente diccionario:

 {'3d1011c0bade5f0a064f7daeef09e7acf900cfe8af09e025859b3426': ['mils news 02122002_0005.txt', 1] }

Dónde

 ['mils news 02122002_0005.txt', 1]

es una lista Y ahora tengo lo siguiente:

result_array = {k: db_array.get(k, 0)[1] + db_array.get(k, 0)[1] for k in set(db_array) | set(db_array)}

con esto quiero sumar el numero que esta en la lista con otro diccionario. Entonces, mi pregunta es cómo mantener el diccionario sin cambios, porque obtengo lo siguiente:

{'3d1011c0bade5f0a064f7daeef09e7acf900cfe8af09e025859b3426': 2}

como resultado.

Rendimiento esperado:

{'3d1011c0bade5f0a064f7daeef09e7acf900cfe8af09e025859b3426': ['mils news 02122002_0005.txt', 2] }

De acuerdo con la primera respuesta del usuario, tnx para la solución, pero obtengo lo siguiente para diferentes claves:

db_array = {'a': ['mils news 02122002_0005.txt', 3]}
>>> result_array = {'b': ['mils news 02122002_0005.txt', 3]}
>>> result_array = {k: [db_array[k][0],db_array[k][1] + result_array.get(k, ['', 0])[1]] for k in set(db_array) | set(result_array)}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <dictcomp>
KeyError: 'b'

preguntado el 22 de mayo de 12 a las 10:05

sí hay db_array y db_array dos diccionarios diferentes? -

los puse dos veces por ejemplo... Este es el código original: result_array = {k: db_array.get(k, 0) + result_array.get(k, 0) for k in set(db_array) | conjunto (matriz_resultado)} -

Bueno, la reutilización de result_array es en realidad razonablemente significativa, actualicé mi respuesta para reflejar eso. -

1 Respuestas

Incluya el valor db_array[k][0] en la expresión del generador de dictados:

dv = ['', 0]
result_array = {k: [
        db_array.get(k, result_array.get(k))[0],
        db_array.get(k, dv)[1] + result_array.get(k, dv)[1]
    ] for k in set(db_array) | set(result_array)}

Tenga en cuenta que actualicé el valor predeterminado a ['', 0] (y usé una variable para aumentar la legibilidad) si la clave aún no está presente en ninguno de los dict. Tenga en cuenta que para el primer elemento de la lista recurrimos a result_array si la clave no estaba presente en db_array; la clave siempre está presente en al menos uno de los dos dictados, de esta manera no termina con valores de cadena vacíos.

Si la llave no estuviera en el result_array dict, entonces su valor predeterminado original causaría problemas, ya que usa un int 0 para luego indexar como una matriz:

>>> result_array.get('foobar', 0)[1]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not subscriptable

(Actualizado para reflejar su comentario mostrando su código original).

contestado el 22 de mayo de 12 a las 10:05

bueno, también podría suceder que el número de claves (elementos) en db_array no sea el mismo con los elementos de result_array. - badc0re

set(db_array) | set(result_array) significa tomar todos los claves de ambos dictados y combínelos en un conjunto, la unión de las claves. ¿Estás diciendo que podría haber llaves en result_array que no están en db_array? - Martijn Pieters

sí, es cierto, podría darse el caso de que no haya ninguna clave en una de las matrices, por lo que tengo que combinarla en una matriz. - badc0re

He actualizado la respuesta para poner el .get() vuelve a llamar, con un valor predeterminado más legible. También actualicé la forma en que recuperas el primer elemento de tu lista para que nunca esté vacío. - Martijn Pieters

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.