回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我想合并两个字典列表,使用多个键。在</p>
<p>我有一个包含一组结果的dict列表:</p>
<pre><code>l1 = [{'id': 1, 'year': '2017', 'resultA': 2},
{'id': 2, 'year': '2017', 'resultA': 3},
{'id': 1, 'year': '2018', 'resultA': 3},
{'id': 2, 'year': '2018', 'resultA': 5}]
</code></pre>
<p>以及另一组结果的dict列表:</p>
^{pr2}$
<p>我想用'id'和'year'键将它们组合起来,得到以下信息:</p>
<pre><code>all = [{'id': 1, 'year': '2017', 'resultA': 2, 'resultB': 5},
{'id': 2, 'year': '2017', 'resultA': 3, 'resultB': 8},
{'id': 1, 'year': '2018', 'resultA': 3, 'resultB': 7},
{'id': 2, 'year': '2018', 'resultA': 5, 'resultB': 9}]
</code></pre>
<p>我知道,要在一个键上组合两个dict列表,我可以使用以下方法:</p>
<pre><code>l1 = {d['id']:d for d in l1}
all = [dict(d, **l1.get(d['id'], {})) for d in l2]
</code></pre>
<p>但它忽略了年份,提供了以下错误结果:</p>
<pre><code>all = [{'id': 1, 'year': '2018', 'resultA': 3, 'resultB': 5},
{'id': 2, 'year': '2018', 'resultA': 5, 'resultB': 8},
{'id': 1, 'year': '2018', 'resultA': 3, 'resultB': 7},
{'id': 2, 'year': '2018', 'resultA': 5, 'resultB': 9}]
</code></pre>
<p>像在R中一样处理这个问题,通过添加第二个我想合并的变量,我得到一个KeyError:</p>
<pre><code>l1 = {d['id','year']:d for d in l1}
all = [dict(d, **l1.get(d['id','year'], {})) for d in l2]
</code></pre>
<p>如何使用多个键合并?在</p>