如何在Python中按键对数据进行分组并以特定格式返回结果,有效处理具有重复键的数据并保持顺序?

Linda Hamilton
发布: 2024-10-28 14:08:30
原创
855 人浏览过

How can I group data by keys in Python and return the result in a specific format, effectively handling data with repeating keys and maintaining order?

Python 按键对数据进行分组

本指南解决了在 Python 中按特定键对数据进行分组的任务。我们的目标是为给定的数据集实现高效且有序的分组解决方案。

问题陈述

考虑以下表示为键值对的数据集:

<code class="python">input = [
          ('11013331', 'KAT'), 
          ('9085267',  'NOT'), 
          ('5238761',  'ETH'), 
          ('5349618',  'ETH'), 
          ('11788544', 'NOT'), 
          ('962142',   'ETH'), 
          ('7795297',  'ETH'), 
          ('7341464',  'ETH'), 
          ('9843236',  'KAT'), 
          ('5594916',  'ETH'), 
          ('1550003',  'ETH')
        ]</code>
登录后复制

目标是通过对应的键(每个元组中的第二个元素)对这些数据对进行分组,并以以下格式返回分组结果:

<code class="python">result = [ 
           { 
             'type': 'KAT', 
             'items': ['11013331', '9843236'] 
           },
           {
             'type': 'NOT', 
             'items': ['9085267', '11788544'] 
           },
           {
             'type': 'ETH', 
             'items': ['5238761', '962142', '7795297', '7341464', '5594916', '1550003'] 
           }
         ] </code>
登录后复制

解决方案

以下是有效对数据进行分组的步骤:

  1. 创建字典:使用 defaultdict 来存储每个键的项目。使用默认工厂初始化字典,为每个新键创建一个空列表。

    <code class="python">from collections import defaultdict
    
    res = defaultdict(list)
    for v, k in input:
     res[k].append(v)</code>
    登录后复制
  2. 将字典转换为预期格式:生成最终结果结果,将字典转换为具有所需结构的字典列表。

    <code class="python">result = [{'type': k, 'items': v} for k, v in res.items()]</code>
    登录后复制

可选注释:

  • 之前Python 3.7,字典不维护插入顺序。要保留键的原始顺序,请考虑使用 OrderedDict。
  • 或者,也可以使用 itertools.groupby 函数进行分组,但它需要预先对输入进行排序。
  • 对于大型数据集,使用具有分组功能的数据库可能比此处介绍的内存解决方案更有效。

以上是如何在Python中按键对数据进行分组并以特定格式返回结果,有效处理具有重复键的数据并保持顺序?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!