我們有一個字典串列:
example = [
{'a': 11, 'b': 2, 'c': 3},
{'a': 11, 'b': 22, 'c': 33},
{'a': 11, 'b': 222, 'c': 333}
]
如何通過重復鍵對字典進行分組a?
example = {
11: [
{'b': 2, 'c': 3},
{'b': 22, 'c': 33},
{'b': 222, 'c': 333}
]
}
uj5u.com熱心網友回復:
可以使用 進行分組itertools.groupby。
創建一個從可迭代物件回傳連續鍵和組的迭代器。鍵是計算每個元素的鍵值的函式。如果未指定或為 None,則 key 默認為標識函式并回傳未更改的元素。通常,iterable 需要已經在相同的 key 函式上排序。
from itertools import groupby
example = [
{'a': 11, 'b': 2, 'c': 3},
{'a': 11, 'b': 22, 'c': 33},
{'a': 11, 'b': 222, 'c': 333}
]
for k, g in groupby(example, key=lambda v: v.pop("a", None)):
print(k, list(g))
輸出:
11 [{'b': 2, 'c': 3}, {'b': 22, 'c': 33}, {'b': 222, 'c': 333}]
uj5u.com熱心網友回復:
在 O(n) 中沒有什么太難的;
res_dic = {}
for dic in example :
val = str(dic.pop('a'))
if res_dic.get(val):
res_dic[val].append(dic)
else:
res_dic[val] = [dic,]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/411531.html
標籤:
