返回顶部
首页 > 资讯 > 后端开发 > Python >【Python】对字典列表进行去重追加
  • 580
分享到

【Python】对字典列表进行去重追加

字典列表Python 2023-01-31 06:01:56 580人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

[TOC] 目标 现有字典列表 # A = [ {dict1}, {dict2} ] B = [ {dict3}, {dict2} ] C = [ {dict3}, {dict4} ] M = [

[TOC]

目标

现有字典列表

    # 
    A = [ {dict1}, {dict2} ]
    B = [ {dict3}, {dict2} ]
    C = [ {dict3},  {dict4} ]
    M = [A,B,C]
    X = []

将M去重后的字典放入列表X中,得到X = [{dict1}, {dict2},{dict3}, {dict4}]

难点

字典列表

大家可能一开始会想到使用set()函数转化为集合,自动去重。但是集合是使用hash来计算并去重的,但是字典类型无法使用Hash计算。虽然可以使用类class或者命名元组namedtupe来替换字典,但是这次的场景是无法变更列表的产生源的。

列表无集合操作的方法

列表之间无法使用交并差(&,|,-)的方式的集合计算方法

思路

# JSON,性能差
data = set([json.dumps(d) for d in data])
data = [json.loads(d) for d in data]

#  这种方式只能对ABC生效,对M还需要再一次循环,玛法
sortedlist = []

for item in listwhichneedssorting:
    if item not in sortedlist:
        sortedlist.append(item)

# 这种缩短了两行
for i in M:
    X.extend(filter(lamda s: s not in X, i)) 

# 使用extend()而不是append(),因为我们需要拼接的是字典列表,而不是列表的列表
# lamda s: s not in X, M 匿名函数,对i中的元素是否在X中进行判断
# filter() 对上面匿名函数中不满足条件(即重复的字典)进行过滤,返回尚未添加到X中的字典元素列表
# 使用extend()进行追加到X中

应用

主要是从neo4j中取出关系数据,分离节点,连接的关系,并转换为前端适用的数据返回

def get_nodes_relationships(graph_list=None, ret_fORMat=None):
    """
    将将关系与节点分离到各自的列表中
    :param graph_list:
    :param ret_format:
    :return:
    """
    node_list = []
    relationship_list = []
    for i in map(lambda x: x.get('graph', None).get('nodes'), graph_list):
        node_list.extend(filter(lambda x: x not in node_list, i))
    for m in map(lambda y: y.get('graph', None).get('relationships', None), graph_list):
        relationship_list.extend(filter(lambda x: x not in relationship_list, m))
    # i和m都是由字典组成的列表,i为单字典列表,m为多字典列表,
    # 前端要求去重,这里使用函数式语句返回没有在结果列表中出现的字典,然后使用extend()追加

    # 如果是面向d3,需要更改部分信息为d3适配
    if ret_format == 'd3':
        def to_d3(link):
            """
            面向d3框架更改关系的键名,增加节点的数字类型
            :param link: 关系
            :return: 更改后返回
            """
            # 使用推出键值对,重新推入的方式实现变更键名为前端可以识别的source
            link.update(source=link.pop('startNode'))
            # 使用推出键值对,重新推入的方式实现变更键名为前端可以识别的target
            link.update(target=link.pop('endNode'))
            value_map = {
                "meta_in": 1,
                "slave_of": 2,
                "shard_to": 3
            }
            link['value'] = value_map[link['type']]
            return link

        relationship_list = map(lambda x: to_d3(x), relationship_list)

    # 如果是面向echarts,需要更改部分信息为echarts适配
    if ret_format == 'echarts':
        def to_echarts(node=None, link=None):
            """
            echarts适配
            :param node: 单个节点
            :param link: 单个关系
            :return: 更改后的节点或者关系
            """
            if (node and link) or (node is None and link is None):
                print("fuck you")
                exit(1)
            if node:
                node['name'] = node['id']
                node['draggable'] = True
                node['cateGory'] = node['labels'][0]
                del node['labels']
                # del node['properties']
                bom = node
            if link:
                # 使用推出键值对,重新推入的方式实现变更键名为前端可以识别的source
                link.update(source=link.pop('startNode'))
                # 使用推出键值对,重新推入的方式实现变更键名为前端可以识别的target
                link.update(target=link.pop('endNode'))
                link.update(category=link.pop('type'))
                del link['id']
                del link['properties']
                # del link['category']
                bom = link
            return bom
        node_list = map(lambda node: to_echarts(node), node_list)
        relationship_list = map(lambda relation: to_echarts(link=relation), relationship_list)

    # 为什么要用set而不是list来转化map对象:
    #  1.去重
    #  2.减小对象大小,达到缩减内存占用
    # 为什么还是用list而不是set?
    #  1.dict对象不能被hash计算
    ret = {"nodes": list(node_list), "links": list(relationship_list)}

    return ret

--结束END--

本文标题: 【Python】对字典列表进行去重追加

本文链接: https://lsjlt.com/news/189509.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 【Python】对字典列表进行去重追加
    [TOC] 目标 现有字典列表 # A = [ {dict1}, {dict2} ] B = [ {dict3}, {dict2} ] C = [ {dict3}, {dict4} ] M = [...
    99+
    2023-01-31
    字典 列表 Python
  • Python中如何通过itemgetter对字典列表进行排序
    本篇文章为大家展示了Python中如何通过itemgetter对字典列表进行排序,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。前言:我们有一个字典列表,想根据一个或多个字典中的值对列表进行排序。利用...
    99+
    2023-06-02
  • 怎么加速Python列表和字典
    本篇内容主要讲解“怎么加速Python列表和字典”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么加速Python列表和字典”吧!我们先编写一个装饰器函数来计算函数的执行时间,方便测验不同代码的...
    99+
    2023-06-16
  • Python对list列表结构中的值进行去重的方法总结
    今天遇到一个问题,在同事随意的提示下,用了 itertools.groupby 这个函数。不过这个东西最终还是没用上。 问题就是对一个list中的新闻id进行去重,去重之后要保证顺序不变。 直观方法 最简单...
    99+
    2022-06-04
    结构 方法 列表
  • python列表怎么添加字典元素
    要向Python列表中添加字典元素,可以使用列表的append()方法。例如: my_list = [] my_dict = {&...
    99+
    2024-04-02
  • python怎么对字典进行排序
    在Python中,可以使用`sorted()`函数对字典进行排序。字典本身是无序的,但可以将其转换为一个由键值对元组组成的列表,然后...
    99+
    2023-10-12
    python
  • Python中字典列表中删除重复项
    要从字典列表中删除重复项: 使用字典推导来遍历列表。使用每个 id 属性的值作为键,使用字典作为值。使用 dict.values() 方法只获取唯一的字典。使用&...
    99+
    2023-05-16
    Python字典删除重复项 Python 删除重复项 Python列表删除重复项
  • python判断对象的类型(字典,列表,
    return (type(obj).__name__ == 'dict') 字典:dict 列表:list 集合:set ...
    99+
    2023-01-31
    字典 对象 类型
  • Python中字符串和列表怎么去重
    这篇文章主要介绍“Python中字符串和列表怎么去重”,在日常操作中,相信很多人在Python中字符串和列表怎么去重问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中字符串和列表怎么去重”的疑惑有所...
    99+
    2023-07-05
  • 聊聊Python中列表和字典前加星号(**)
    为什么Python列表和字典前面会加星号(**)?下面本篇文章给大家聊聊Python中列表和字典前加星号(**)的原因。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。Python 中,单星号*和双星号**除了作为“乘”和“...
    99+
    2022-07-11
    字典 列表 python
  • Python按键或值对字典进行排序
    给定一个字典,然后按键(key)或值(value)对字典进行排序。 def dictionairy(): # 声明字典 key_value ={} ...
    99+
    2024-04-02
  • Python编程根据字典列表相同键的值进行合并
    目录一、前言两个列表的数据为:期望合并的结果二、实现分析三、总结一、前言 今天有粉丝咨询了一个问题,他现在有两个列表,它们的元素都为字典,且字典都有一个key为id,现在想把这两个字...
    99+
    2024-04-02
  • Python中字典和列表性能的对比分析
    本篇文章为大家展示了Python中字典和列表性能的对比分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python列表和字典前面我们了解了 “大O表示法” 以及对不同的算法的评估,下面来讨论下 P...
    99+
    2023-06-15
  • Python中字符串和列表去重方法总结
    目录字符串去重1、直接遍历字符串的方式2、遍历去重的另一种方式3、将字符串转换成列表的方式(list sort)4、根据字符串下标,判断子集5、使用 ', '.joi...
    99+
    2023-05-15
    Python字符串去重 Python列表去重 Python去重
  • Python根据字典值对字典进行排序的三种方法实例
    目录一、实际场景及解决思路二、字典排序的三种实现方法2.1 使用列表解析方法实现字典排序2.2 使用zip方法实现字典排序2.3 使用传递sorted函数的key参数实现字典排序三、...
    99+
    2024-04-02
  • Python实现嵌套列表及字典并按某一元素去重复功能示例
    本文实例讲述了Python实现嵌套列表及字典并按某一元素去重复功能。分享给大家供大家参考,具体如下: #! /usr/bin/env python #coding=utf-8 class HostSch...
    99+
    2022-06-04
    嵌套 示例 并按
  • python如何对二维列表进行排序
    Python可以使用内置的sort()方法对二维列表进行排序。sort()方法可以接受一个可选的参数key,用于指定排序的依据。以下...
    99+
    2023-10-11
    python
  • python怎么对二维列表进行排序
    在Python中,可以使用sorted()函数来对二维列表进行排序。你可以通过传递一个lambda函数作为key参数来指定排序的规则...
    99+
    2024-02-29
    python
  • python使用sorted函数对列表进行排序
    在python中使用sorted函数对列表进行排序的方法sorted:sorted()函数的作用是对所有可迭代的对象进行排序操作。sorted()函数语法:sorted(iterable, key=None, reverse=False) ...
    99+
    2024-04-02
  • Python中列表和字典前加星号的作用是什么
    本文小编为大家详细介绍“Python中列表和字典前加星号的作用是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python中列表和字典前加星号的作用是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Pyt...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作