First of all, i’m sure that the title is a bit confusing, but I couldn’t think of a good way to state in a few words the scope of a solution I was looking for today. Basically, I had a list of dictionaries and I wanted to create a new list of dictionaries with an additional key-value pair. For example, let’s say I have a list of dictionaries which define `a` and `b`:

```my_list = [
{ 'a': 1, 'b': 2 },
{ 'a': 2, 'b': 3 },
{ 'a': 3, 'b': 4 }
]
```

What I wanted to do was create a new list containing copies of the dictionaries with a new key-value pair. After finding this stackoverflow answer I came up with a solution similar to the following:

```import math
list1 = [
{'a': 1, 'b': 2},
{'a': 2, 'b': 3},
{'a': 3, 'b': 4}
]
list2 = [dict(d.items() + [('c', math.hypot(*d.values()))]) for d in list1]
# [
#     {'a': 1, 'c': 2.23606797749979, 'b': 2},
#     {'a': 2, 'c': 3.605551275463989, 'b': 3},
#     {'a': 3, 'c': 5.0, 'b': 4}
# ]
```

Cool stuff, right? Do you know what is actually happening? `d.items()` actually turns each key-value pair into a tuple and returns them all as a list. Then we are concatenating our tuple to make a new list of three tuples. In this case doing `math.hypot(*args)` actually passes each item in the list as a separate argument (here is more information about using an `apply`-like function in Python). After that `dict(...)` takes that list of tuples and creates a dictionary from them. Finally, this is done for each dictionary in `list1`, add the new dictionary to a new list which is assigned to `list2`.

How cool is that?!?!?! Even though I still am a big fan of JavaScript, the fact that you can write this type of code in Python is pretty inspiring! 😎

Categories: BlogPython