我在当前这样的列表中有一个字典:
[ {'name': 'Joe',
'score': 98,
'subject': 'Math'},
{'name': 'Bob',
'score': 90,
'subject': 'Math'},
{'name': 'Bill',
'score': 88,
'subject': 'English'},
{'name': 'Jane',
'score': 95,
'subject': 'English'}]
我想将其重新组合或重组如下:
[ {'subject': 'Math',
'Results': [{'name': 'Joe','score':98}, {'name':'Bob', 'score':90}]},
{'subject': 'English',
'Results': [{'name': 'Jane','score':95}, {'name':'Bill', 'score':88}]}
]
我尝试使用
itertools.groupby
和dict.setdefault()
作为建议的here,但不能完全得到我想要的。我怎样才能做到这一点? 最佳答案
通过一个小循环和dict.setdefault
,您可以像这样进行分组:
码:
grouped = {}
for score in scores:
grouped.setdefault(score['subject'], []).append(
{k: v for k, v in score.items() if k != 'subject'})
分组后要获取其他输出格式:
grouped = [{'subject': k, 'Results': v} for k, v in grouped.items()]
测试代码:
scores = [
{'name': 'Joe',
'score': 98,
'subject': 'Math'},
{'name': 'Bob',
'score': 90,
'subject': 'Math'},
{'name': 'Bill',
'score': 88,
'subject': 'English'},
{'name': 'Jane',
'score': 95,
'subject': 'English'}]
grouped = {}
for score in scores:
grouped.setdefault(score['subject'], []).append({
k: v for k, v in score.items() if k != 'subject'})
print([{'subject': k, 'Results': v} for k, v in grouped.items()])
结果:
[
{'subject': 'Math',
'Results': [{'name': 'Joe', 'score': 98}, {'name': 'Bob', 'score': 90}]},
{'subject': 'English',
'Results': [{'name': 'Bill', 'score': 88}, {'name': 'Jane', 'score': 95}]}
]