I have a list of dictionaries like so:
dicts = [
{'key_a': valuex1,
'key_b': valuex2,
'key_c': valuex3},
{'key_a': valuey1,
'key_b': valuey2,
'key_c': valuey3},
{'key_a': valuez1,
'key_b': valuez2,
'key_c': valuez3}
]
I would like to take these and construct a big dictionary like so:
big_dict = {
'key_a': [valuex1, valuey1, valuez1],
'key_b': [valuex2, valuey2, valuez2],
'key_c': [valuex3, valuey3, valuez3]
}
Is there any elegant "zip"-like way for me to do this?
All the keys are always going to be identical.
Using the merge operator, we can combine dictionaries in a single line of code. We can also merge the dictionaries in-place by using the update operator (|=).
The straight answer is NO. You can not have duplicate keys in a dictionary in Python.
You can't. Keys have to be unique.
You can use collections.defaultdict. The benefit of this solution is it does not require keys to be consistent across dictionaries, and it still maintains the minimum O(n) time complexity.
from collections import defaultdict
dict_list = [{'key_a': 'valuex1', 'key_b': 'valuex2', 'key_c': 'valuex3'},
{'key_a': 'valuey1', 'key_b': 'valuey2', 'key_c': 'valuey3'},
{'key_a': 'valuez1', 'key_b': 'valuez2', 'key_c': 'valuez3'}]
d = defaultdict(list)
for myd in dict_list:
for k, v in myd.items():
d[k].append(v)
Result:
print(d)
defaultdict(list,
{'key_a': ['valuex1', 'valuey1', 'valuez1'],
'key_b': ['valuex2', 'valuey2', 'valuez2'],
'key_c': ['valuex3', 'valuey3', 'valuez3']})
big_dict = {}
for k in dicts[0]:
big_dict[k] = [d[k] for d in dicts]
Or, with a dict comprehension:
{k: [d[k] for d in dicts] for k in dicts[0]}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With