Advertencia 1: como se indica en los documentos, no se garantiza que funcione en todas las implementaciones de Python:
Detalle de la implementación de CPython: esta función se basa en el soporte del marco de pila de Python en el intérprete, que no se garantiza que exista en todas las implementaciones de Python. Si se ejecuta en una implementación sin soporte de marco de pila de Python, esta función devuelve None.
Advertencia 2: esta función hace que el código sea más corto, pero probablemente contradice la filosofía de Python de ser lo más explícito posible. Además, no aborda los problemas señalados por John Christopher Jones en los comentarios, aunque podría crear una función similar que funcione con atributos en lugar de claves. ¡Esto es solo una demostración de que puede hacer eso si realmente lo desea!
def destructure(dict_):
if not isinstance(dict_, dict):
raise TypeError(f"{dict_} is not a dict")
parent_frame = inspect.currentframe().f_back
(line,) = inspect.getframeinfo(parent_frame).code_context
lvalues, _equals, _rvalue = line.strip().partition("=")
keys = [s.strip() for s in lvalues.split(",") if s.strip()]
if missing := [key for key in keys if key not in dict_]:
raise KeyError(*missing)
for key in keys:
yield dict_[key]
In [5]: my_dict = {"hello": "world", "123": "456", "key": "value"}
In [6]: hello, key = destructure(my_dict)
In [7]: hello
Out[7]: 'world'
In [8]: key
Out[8]: 'value'
Esta solución le permite elegir algunas de las claves, no todas, como en JavaScript. También es seguro para los diccionarios proporcionados por el usuario.