擅长:python、mysql、java
<p>在Python3.9(ETA Fall 2020)中,您将能够使用<code>|</code>操作符将<code>dict</code>与相同的<code>id</code>键合并</p>
<pre><code>from itertools import groupby
from operator import or_, itemgetter
from functools import reduce
# I know *why* groupby doesn't have an option to
# sort your data first, but that doesn't mean I can't
# wish that it could...
def group(data, key):
"Iterate over groups of dicts considered equal according to key"
yield from map(itemgetter(1), groupby(sorted(data, key=key), key))
data = [
{'id': '10', 'animal' : 'cat'},
{'id': '11', 'animal' : 'dog'},
{'id': '3', 'animal' : 'pigeon'},
{'id': '10', 'color' : 'yellow'},
{'id': '11', 'color' : 'brown'},
{'id': '3', 'color' : 'grey'},
{'id': '10', 'type' : 'furry'},
{'id': '11', 'type' : 'fluffy'},
{'id': '3', 'type' : 'dirty'},
]
# E.g., {'id': 10, 'animal': 'cat'} | {'id': 10, 'color': 'yellow'}
# == {'id': 10, 'animal': 'cat', 'color': 'yellow'}
data = [reduce(or_, ds) for ds in group(data, itemgetter('id'))]
</code></pre>