Stagg - 1 year ago 73

Python Question

I have this list of dictionaries :

`[{'Eva': [4, 8, 2]}, {'Ana': [57, 45, 57]}, {'Ada': [12]}]`

I need to get the average of each key value, so that the output is :

`[{'Eva': [5], {'Ana' : [53]}, {'Ada':[12]}]`

The average must be rounded up or down by adding 0.5 and taking the only the integer part. For example, if the average is 4.3 adding 0.5 equals 4.8, so the output is 4. If the average is 4.6 adding 0.5 equals 5.1, so the output is 5.

I know how to use

`iteritems()`

Thanks in advance.

Answer Source

You can use `zip`

and `numpy`

functions `mean`

and `round`

for this task:

```
In [8]: import numpy as np
In [9]: [dict(zip(d.keys(), [int(np.round(np.mean(d.values())))])) for d in L]
#Out[9]: [{'Eva': 5}, {'Ana': 53}, {'Ada': 12}]
```

Version with "less" parenthesis:

```
[dict(zip(d.keys(), [np.array(d.values()).mean().round().astype(int)])) for d in L]
```