Los Dictionary comprehensions -o Dict comprehensions para abreviar- son estructuras semejantes a las vistas pero, tal y como indica su nombre, generan diccionarios. Un ejemplo es el siguiente:
cities = ["Madrid", "Barcelona", "Milán", "Santander"]
{c: len(c) for c in cities}
{'Madrid': 6, 'Barcelona': 9, 'Milán': 5, 'Santander': 9}
En este ejemplo hemos hecho referencia a una única lista, pero no tiene por qué ser así:
cities = ["Madrid", "Barcelona", "Milán", "Santander"]
years = [2017, 2018, 2019, 2020]
{c: y for c in cities for y in years}
{'Madrid': 2020, 'Barcelona': 2020, 'Milán': 2020, 'Santander': 2020}
Obsérvese que, en este caso, también se está simulando el mismo bucle *for* anidado que ya hemos visto:
d = {}
for c in cities:
for y in years:
d.update({c: y})
d
{'Madrid': 2020, 'Barcelona': 2020, 'Milán': 2020, 'Santander': 2020}
Solo subsisten cuatro parejas clave-valor (en lugar de 16) pues ya sabemos que en un diccionario no puede haber claves repetidas, por lo que para cada valor c se recorren todos los años en la variable "y" y se va sobrescribiendo el valor que pueda existir para la clave c.
Si quisiéramos obtener un diccionario que relacionase cada par de valores de cities y years, podríamos hacerlo con la función zip:
{c: y for c, y in zip(cities, years)}
{'Madrid': 2017, 'Barcelona': 2018, 'Milán': 2019, 'Santander': 2020}