微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python按多个键对字典进行分组

如何解决python按多个键对字典进行分组

我有一个这样的字典列表:

    my_list = [{
        "name": "alin","id": 2,"note": -10
    },{
        "name": "alin",{
        "name": "milanie","id": 3,"note": 11
    },{
        "name": "martin","note": 11}]

我想按出现次数对它们进行分组,我已经这样做了:

my_list = [{
        "name": "alin","note": -10,"occ": 3
    },},"note": 11}]

我的问题是他如何按 id 和 note 分组并获得这样的字典:

{ "name": "martin","note": 11,"occ":2}

解决方法

你可以很容易地在 Pandas 中做到这一点。

import pandas as pd
my_list = [{
    "name": "alin","id": 2,"note": -10
},{
    "name": "alin",{
    "name": "milanie","id": 3,"note": 11
},{
    "name": "martin","note": 11}]

pd.DataFrame(my_list).groupby(['name','id','note']).size().reset_index(name='occ').to_dict('records')

输出

[{'name': 'alin','id': 2,'note': -10,'occ': 3},{'name': 'martin','id': 3,'note': 11,'occ': 1},{'name': 'milanie','occ': 1}]

编辑:

根据您的要求,您可以使用命名的 agg 来明确定义您的列和聚合。在这种情况下,我们将使用每个组的 last 名称来获取 martin,但如果您愿意,您可以使用 first 来获取 melanie。如果您需要一个特定的名称,您可能希望首先按名称对值进行排序,以保证您获得的名称。

pd.DataFrame(my_list).groupby(['id','note']).agg(name=('name','last'),occ=('id','count')).reset_index().to_dict('records')

输出

[{'id': 2,'name': 'alin',{'id': 3,'name': 'martin','occ': 2}]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。