1 回答

TA贡献1797条经验 获得超6个赞
您可以使用单线itertools.groupby
来实现这一目标。
但首先有几点需要澄清:
在您的简单版本中,您有一个
group
未定义的键。我只是假设这是一个字符串:'group'
。输入数据中不存在所需输出中的键
'material'
,因此我将在构建结果字典期间添加此键,使用输入数据中的值作为此新键的值。简单地按一个键分组不会自动从字典中删除这个键值对,所以分组后你的字典中仍然会有你的“组”键。
所以这就是你的groupby
样子:
from itertools import groupby
init_data = {'wood': {'color': 'red', group: 'old'}, 'stone': {'color': 'gray', group: 'old'}, 'glass': {'color': 'white', group: 'new'}}
# this is in a one-liner, however I added some newlines for readability :)
grouped_data = {
k: list(
{
_k: _v for d in (
{'material': av[0]}, # this is just to add the 'material' key
av[1]
) for _k,_v in d.items()
} for av in v
) for k, v in groupby(
init_data.items(),
lambda x: x[1]['group']
)
}
grouped_data
Out[7]: {'new': [{'color': 'white', 'group': 'new', 'material': 'glass'}],
'old': [{'color': 'gray', 'group': 'old', 'material': 'stone'},
{'color': 'red', 'group': 'old', 'material': 'wood'}]}
添加回答
举报