我需要将下面的字典按组的值分组,输出想要有这样的值。
目前的结构:
{'sfp_dnscommonsrv': {'object':
<modules.sfp_dnscommonsrv.sfp_dnscommonsrv object at 0x7f448bd6ac50>,
'name': 'DNS Common SRV', 'cats': ['Footprint', 'Investigate',
'Passive'], 'group': 'DNS', 'labels': ['']}, sfp__stor_db': {'object':
<modules.sfp__stor_db.sfp__stor_db object at 0x7f448bd6acc0>, 'name':
'Storage', 'cats': [''], 'group': 'DNS', 'labels': ['']}}成功:
{'DNS': [{value where group is DNS}, {value where group is DNS}],
'DNS2': [{value where group is DNS2}]},简单版本:
数据:
{'wood': {'color': 'red', 'group': 'old'}, 'stone': {'color': 'gray', 'group': 'old'}, 'glass': {'color': 'white', 'group': 'new'}}结果:
{'old': [{'color': 'red', 'material': 'wood'},{'color': 'gray', 'material': 'stone'}], 'new': [{'color': 'white', 'material': 'glass'}]}发布于 2019-08-25 23:46:00
您可以使用itertools.groupby在一个一行程序中实现这一点。
但首先有几件事要澄清:
group。我只是假设这是一个字符串:'group'。'material'不存在于您的输入数据中,所以我将在构造结果dict时添加这个键,使用输入数据中的值作为这个新键的值。因此,您的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'}]}https://stackoverflow.com/questions/57645637
复制相似问题