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'}]}
添加回答
舉報