[Python-ideas] Unpacking a dict

Sven R. Kunze srkunze at mail.de
Wed May 25 15:38:44 EDT 2016

On 25.05.2016 20:42, Steven D'Aprano wrote:
> There's no need to unpack the entire dict, you can grab only the keys
> you need:
> width, height = **prefs
> # like
> width = prefs['width']
> height = prefs['height']

That's not the same behavior as it is for tuple unpacking. As a new 
user, I would expect them to work the same way.

If I want to dismiss the remainder of the dict, I'd rather consider an 
explicit approach:

width, height = **prefs      # just those values
width, height, *r = **prefs  # r captures the rest

This gives me two benefits:

1) I can further work with r from which width and height are extracted
2) a convenient way of verifying that a dict only contains certain 
values and extracting those at the same time

> Sure, you are forced to use the same variable names as the keys, but
> that's what you will probably do most of the time. You're not likely to
> write:
> foo = prefs['width']
> bar = prefs['height']
> although you might write:
> zip_code = prefs['zip code']
> but probably shouldn't. (Just use 'zip_code' as the key.)

"just use 'zip_code' as the key" won't do it when you have no influence 
on the data. I might remind you that most engineers are no gods who can 
change everything at their whim.

> [...]
> If you twist my arm and force me to come up with syntax for a "change of
> variable name", I'd consider:

Rest assured I will twist your arm very hard. ;)

Also rest assured that we use non-string keys on a regular basis.

Maybe, it's just me but I still tend to think that using unquoted 
strings should be reserved for attribute unpacking.

> [...]
> If the target on the left has a colon, it is an identifier followed by
> key. The identifier can be any valid reference, including dots and []
> subscripts. The key must be a string:
> identifier:'key'

I would rather turn it around. It feels weird to have the "key" on the 
right side.

One additional drawback of this solution is the fact that the "value" 
part of the colon is already taken. So, value matching like done in 
Erlang is not possible. OTOH, this applies to tuple unpacking in its 
current form as well


More information about the Python-ideas mailing list