亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在python中將字典與字典分組?

如何在python中將字典與字典分組?

SMILET 2022-05-11 15:48:08
我需要按組的值對下面的字典進行分組,輸出想要有這樣的值。當前結構:{'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'}]}
查看完整描述

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'}]}


查看完整回答
反對 回復 2022-05-11
  • 1 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號