<p>你可以做:</p>
<pre><code>import re
from collections import defaultdict
data = [
{'schedule_day1': 'Sunday'},
{'schedule_day2': 'Saturday'},
{'start_at1': '01:00'},
{'start_at2': '03:00'},
{'end_at1': '02:00'},
{'end_at2': '04:00'}
]
seen = defaultdict(dict)
for d in data:
for name, value in d.items():
key = re.search('(\d+)$', name).group() # this is the key extractor
seen[key][name] = value
result = list(seen.values())
print(result)
</code></pre>
<p><strong>输出</strong></p>
<pre><code>[{'schedule_day1': 'Sunday', 'start_at1': '01:00', 'end_at1': '02:00'}, {'schedule_day2': 'Saturday', 'start_at2': '03:00', 'end_at2': '04:00'}]
</code></pre>
<p>或者你给熊猫贴了标签:</p>
<pre><code>import pandas as pd
df = pd.DataFrame(data=[item for d in data for item in d.items()], columns=['name', 'value'])
grouper = df.groupby(df.name.str.extract('(\d+)$').squeeze())
result = [dict(zip(group.name, group.value)) for _, group in grouper]
print(result)
</code></pre>
<p><strong>输出</strong></p>
<pre><code>[{'schedule_day1': 'Sunday', 'start_at1': '01:00', 'end_at1': '02:00'}, {'schedule_day2': 'Saturday', 'start_at2': '03:00', 'end_at2': '04:00'}]
</code></pre>
<p>两种方法的关键都是按字典中每个键的最后一位分组,在第一种解决方案中,这是使用<code>seen</code>字典(实际上是<a href="https://docs.python.org/3.7/library/collections.html#collections.defaultdict" rel="nofollow noreferrer">defaultdict</a>,在第二种解决方案中是使用<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html" rel="nofollow noreferrer">groupby</a>。你知道吗</p>