I have multiple dicts/key-value pairs like this:
d1 = {key1: x1, key2: y1} d2 = {key1: x2, key2: y2}
I want the result to be a new dict (in most efficient way, if possible):
d = {key1: (x1, x2), key2: (y1, y2)}
Actually, I want result d to be:
d = {key1: (x1.x1attrib, x2.x2attrib), key2: (y1.y1attrib, y2.y2attrib)}
If somebody shows me how to get the first result, I can figure out the rest.
Python 3.9 has introduced the merge operator (|) in the dict class. 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 (|=).
You can't. Keys have to be unique.
No, each key in a dictionary should be unique. You can't have two keys with the same value. Attempting to use the same key again will just overwrite the previous value stored. If a key needs to store multiple values, then the value associated with the key should be a list or another dictionary.
Here's a general solution that will handle an arbitrary amount of dictionaries, with cases when keys are in only some of the dictionaries:
from collections import defaultdict d1 = {1: 2, 3: 4} d2 = {1: 6, 3: 7} dd = defaultdict(list) for d in (d1, d2): # you can list as many input dicts as you want here for key, value in d.items(): dd[key].append(value) print(dd)
Shows:
defaultdict(<type 'list'>, {1: [2, 6], 3: [4, 7]})
Also, to get your .attrib
, just change append(value)
to append(value.attrib)
assuming all keys are always present in all dicts:
ds = [d1, d2] d = {} for k in d1.iterkeys(): d[k] = tuple(d[k] for d in ds)
Note: In Python 3.x use below code:
ds = [d1, d2] d = {} for k in d1.keys(): d[k] = tuple(d[k] for d in ds)
and if the dic contain numpy arrays:
ds = [d1, d2] d = {} for k in d1.keys(): d[k] = np.concatenate(list(d[k] for d in ds))
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