(TOC)
目标
现有字典列表
<=坝镅詐ython代码类> # 一个={dict1}, {dict2}] B=[{dict3}, {dict2}] C=[{dict3}, {dict4}] M=(A, B, C) X=[] 代码>
将M去重后的字典放入列表X中,得到<代码> X=[{dict1}, {dict2}, {dict3}, {dict4}] 代码>
难点
字典列表
大家可能一开始会想到使用<代码>设置()代码>函数转化为集合,自动去重。但是集合是使用散列来计算并去重的,但是字典类型无法使用散列计算。虽然可以使用类类代码>或<代码>者命名元组<代码> namedtupe> 代码来替换字典,但是这次的场景是无法变更列表的产生源的。
列表无集合操作的方法
列表之间无法使用交并差(<代码>和代码>,<代码> | 代码>,<代码> - 代码>)的方式的集合计算方法
思路
<代码类="语言python "> # json、性能差 data=https://www.yisu.com/zixun/set ([json.dumps d (d)的数据) data=[json.loads d (d)的数据) #这种方式只能对ABC生效,对M还需要再一次循环,玛法 sortedlist=[] 在listwhichneedssorting:项 如果项目不是在sortedlist: sortedlist.append(项) #这种缩短了两行 M:我的 X。扩展(过滤器(λ:年代不是X,我)) #使用扩展()而不是append(),因为我们需要拼接的是字典列表,而不是列表的列的表 #λ:年代X,米匿名函数,对我中的元素是否在X中进行判断 #过滤器()对上面匿名函数中不满足条件(即重复的字典)进行过滤,返回尚未添加到X中的字典元素列表 #使用扩展()进行追加到X中代码>
应用
主要是从neo4j中取出关系数据,分离节点,连接的关系,并转换为前端适用的数据返回
<代码类="语言python "> def get_nodes_relationships (graph_list=None, ret_format=None): ”“” 将将关系与节点分离到各自的列表中 :param graph_list: :param ret_format: 返回: ”“” node_list=[] relationship_list=[] 因为我在地图(λx: x。(“图”,没有一个). get(节点),graph_list): node_list。扩展(过滤器(λx: node_list, i)) 米图(λy: y。(“图”,没有一个)。(“关系”,没有一个),graph_list): relationship_list。扩展(过滤器(λx: relationship_list, m)) #我和米都是由字典组成的列的表,我为单字典列表,m为多字典列表, #前端要求去重,这里使用函数式语句返回没有在结果列表中出现的字典,然后使用扩展()追加 #如果是面向d3,需要更改部分信息为d3适配 如果ret_format==癲3”: def to_d3(链接): ”“” 面向d3框架更改关系的键名,增加节点的数字类型 :param链接:关系 返回:更改后返回 ”“” #使用推出键值对,重新推入的方式实现变更键名为前端可以识别的来源 link.update(源=link.pop (startNode)) #使用推出键值对,重新推入的方式实现变更键名为前端可以识别的目标 link.update(目标=link.pop (endNode)) value_map={ “meta_in”: 1、 “slave_of”: 2 “shard_to”: 3 } 链接(“价值”)=value_map[链接('类型']) 返回链接 relationship_list=地图(λx: to_d3 (x) relationship_list) #如果是面向echarts,需要更改部分信息为echarts适配 如果ret_format==癳charts”: def to_echarts(节点=None,链接=None): ”“” echarts适配 :param节点:单个节点 :param链接:单个关系 返回:更改后的节点或者关系 ”“” 如果(节点和链接)或(节点和链接是没有问题): print(“去你妈的”) 退出(1) 如果节点: 节点['名字']=节点(“id”) 节点(“拖拽”)=True 节点(“类别”)=节点['标签'][0] 德尔节点(“标签”) # del节点(“属性”) bom=节点 如果链接: #使用推出键值对,重新推入的方式实现变更键名为前端可以识别的来源 link.update(源=link.pop (startNode)) #使用推出键值对,重新推入的方式实现变更键名为前端可以识别的目标 link.update(目标=link.pop (endNode)) link.update(类别=link.pop('类型')) 德尔链接(“id”) 德尔链接(“属性”) # del链接(“类别”) bom=链接 返回物料清单 node_list=地图(λ节点:to_echarts(节点),node_list) relationship_list=地图(λ关系:to_echarts(链接=关系),relationship_list) #为什么要用设置而不是列表来转化地图对象: # 1。去重 # 2。减小对象大小,达到缩减内存占用 #为什么还是用列表而不是准备好了吗? # 1. dict对象不能被散列计算 ret={“节点”:列表(node_list)、“链接”:列表(relationship_list)} 返回ret【Python】对字典列表进行去重追加