簡體   English   中英

如何按鍵對 python 字典進行分組?

[英]How to group python dicts by key?

我們有一個字典列表:

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

在 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,]

可以使用itertools.groupby進行分組。

創建一個從可迭代對象返回連續鍵和組的迭代器。 鍵是 function 計算每個元素的鍵值。 如果未指定或為 None,則 key 默認為標識 function 並返回未更改的元素。 通常,iterable 需要已經在同一個鍵 function 上排序。

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))

Output:

11 [{'b': 2, 'c': 3}, {'b': 22, 'c': 33}, {'b': 222, 'c': 333}]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM