List comp help

Terry Reedy tjreedy at udel.edu
Mon Jul 15 00:46:05 EDT 2013


On 7/14/2013 1:10 PM, Joseph L. Casale wrote:
> I have a dict of lists. I need to create a list of 2 tuples, where each tuple is a key from
> the dict with one of the keys list items.
>
> my_dict = {
>      'key_a': ['val_a', 'val_b'],
>      'key_b': ['val_c'],
>      'key_c': []
> }
> [(k, x) for k, v in my_dict.items() for x in v]

The order of the tuples in not deterministic unless you sort, so if 
everything is hashable, a set may be better.

> This works, but I need to test for an empty v like the last key, and create one tuple ('key_c', None).
> Anyone know the trick to reorganize this to accept the test for an empty v and add the else?

When posting code, it is a good idea to includes the expected or desired 
answer in code as well as text.

pairs = {(k, x) for k, v in my_dict.items() for x in v or [None]}
assert pairs == {('key_a', 'val_a'), ('key_a', 'val_b'),
    ('key_b', 'val_c'), ('key_c', None)}


-- 
Terry Jan Reedy




More information about the Python-list mailing list