Paso 1: transformamos el código utilizando la temp_list en una sola expresión (supongo que temp_list
no es necesario fuera de este código), mediante la adición de en lugar del método append
. Además, no es necesario que use dict.keys()
explícitamente, como otros mencionaron (y de hecho, desperdicia una gran cantidad de tiempo).
for value in value_list:
if value.key in dict:
dict[value.key] = dict[value.key] + [value.val]
else:
dict[value.key] = [value.val]
Paso 2: Transformar la asignaciones-to-the-same-ubicación utilizando la sintaxis de la expresión condicional.
for value in value_list:
dict[value.key] = dict[value.key] + [value.val] if value.key in dict else [value.val]
Paso 3: Al añadir o anteponiendo una lista vacía no tiene efecto sobre el valor de una lista, por lo que se puede insertar eso, y luego factorizar la 'adición' común del valor.
for value in value_list:
dict[value.key] = (dict[value.key] if value.key in dict else []) + [value.val]
Paso 4: Reconocer que el dict ha incorporado en la funcionalidad para proporcionar un valor 'por defecto' cuando la llave está ausente:
for value in value_list:
dict[value.key] = dict.get(value.key, []) + [value.val]
Paso 5: En lugar de obtener un valor, modificándolo y el establecimiento de nuevo, podemos utilizar .setdefault
para darnos el contenido actual (o configurarlas si no está ya allí), y luego volver a utilizar .append
para modificar la lista:
for value in value_list:
dict.setdefault(value.key, []).append(value.val)
(Quiero decir ... podría haberlo mirado y pensado un poco y llegué a esto, pero ver cada paso lo deja más claro hacia dónde vamos ...)
Solo dos pequeñas notas: 1) '... en dict.keys():' puede acortarse a '... en dict:'. 2) Las variables no deben nombrarse después de las incorporaciones: en este caso, considere renombrar 'dict'. – miku
¿Qué quieres decir con mejor manera? más simple o más rápido? –