首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将词典与python中的字典组合起来?

如何将词典与python中的字典组合起来?
EN

Stack Overflow用户
提问于 2019-08-25 11:33:20
回答 1查看 293关注 0票数 0

我需要将下面的字典按组的值分组,输出想要有这样的值。

目前的结构:

代码语言:javascript
复制
{'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': ['']}}

成功:

代码语言:javascript
复制
{'DNS': [{value where group is DNS}, {value where group is DNS}], 
'DNS2': [{value where group is DNS2}]},

简单版本:

数据:

代码语言:javascript
复制
{'wood': {'color': 'red', 'group': 'old'}, 'stone': {'color': 'gray', 'group': 'old'}, 'glass': {'color': 'white', 'group': 'new'}}

结果:

代码语言:javascript
复制
{'old': [{'color': 'red', 'material': 'wood'},{'color': 'gray', 'material': 'stone'}], 'new': [{'color': 'white', 'material': 'glass'}]}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-25 23:46:00

您可以使用itertools.groupby在一个一行程序中实现这一点。

但首先有几件事要澄清:

  • 在您的简单版本中,您有一个未定义的键group。我只是假设这是一个字符串:'group'
  • 您想要的输出中的键'material'不存在于您的输入数据中,所以我将在构造结果dict时添加这个键,使用输入数据中的值作为这个新键的值。
  • 简单地按键分组不会自动从dict中删除这个键值对,因此在分组之后,您的dicts中仍然会有您的“组”键。

因此,您的groupby可能是这样的:

代码语言:javascript
复制
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'}]}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57645637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档