擅长:python、mysql、java
<pre class="lang-py prettyprint-override"><code>list_pts = [
{'city': 'Madrid', 'year': '2017', 'date': '05/07/2017', 'pts': 7},
{'city': 'Madrid', 'year': '2017', 'date': '14/11/2017', 'pts': 5},
{'city': 'Londres', 'year': '2018', 'date': '25/02/2018', 'pts': 5},
{'city': 'Paris', 'year': '2019', 'date': '17/04/2019', 'pts': 4},
{'city': 'Londres', 'year': '2019', 'date': '15/06/2019', 'pts': 8},
{'city': 'Paris', 'year': '2019', 'date': '21/08/2019', 'pts': 8},
{'city': 'Londres', 'year': '2019', 'date': '04/12/2019', 'pts': 2}]
group_by = {}
for pt in list_pts:
d = group_by.setdefault((pt['year'], pt['city']), {})
for k, v in pt.items():
if k not in {'year', 'city'}:
d.setdefault(k, []).append(v)
output = []
for (year, city), rest in group_by.items():
output.append({'year': year, 'city': city} | rest)
</code></pre>
<p>对于3.9之前的Python,请参见<a href="https://stackoverflow.com/a/26853961/8584929">this answer</a>关于字典合并</p>
<p>这是一个使用<code>(year, city)</code>对作为键(可以通过Python中的元组完成)并将所有其他项收集到列表中的问题。从<code>group_by</code>到<code>output</code>的转换只是一个装饰性的东西</p>