Python嵌套字典按键值比较
我有一本字典Python嵌套字典按键值比较,python,python-3.x,Python,Python 3.x,我有一本字典 d={a:{d:val1,e:val2,f:null},b:{p:val3,q:val4,r:val5} 所以我想获取每个键的值,并比较它们之间的嵌套键值,需要形成一个新的字典 new_dict={a:{equal:[d,e],unqual:[],null:f},b:{equal:[p,q],unqual:r,null:[]} 这表示a的对应值{d:val1,e:val2,f:null}与嵌套值val1,val2,null在它们之间进行了比较,并将它们重新构造为a:{equal:[
d={a:{d:val1,e:val2,f:null},b:{p:val3,q:val4,r:val5}
所以我想获取每个键的值,并比较它们之间的嵌套键值,需要形成一个新的字典
new_dict={a:{equal:[d,e],unqual:[],null:f},b:{equal:[p,q],unqual:r,null:[]}
这表示
a
的对应值{d:val1,e:val2,f:null}
与嵌套值val1
,val2
,null
在它们之间进行了比较,并将它们重新构造为a:{equal:[d,e],null:f}
如果d
,e
valuesval1
=val2
和f
是一个null
值,因此每个键都应该具有类似于此格式的值{a:{equal:[],equal:[],unqual:[],null:[],无论如何,有数千种不同的方法,还有很多“更优雅”的方法:
示例中的字典
d={“a”:{“d”:“val1”,“e”:“val2”,“f”:“null”},“b”:{“p”:“val3”,“q”:“val4”,“r”:“val5”}
###要填入结果的新词典
比较={}
###在dict的键、值元素D上打开循环
对于d.项()中的k,v:
###打开一个新的dict来存储相等、不相等和null
子比较={}
###打开列表以存储元素
等于=[];不平等=[];空值=[];
###dict中子字典的k,v项的开环
对于sub_k,v.items()中的sub_v:
###取值的前3个字母(假设您比较的是哪种类型)
sub_v_start=sub_v[0:2]
###若为空,则放入列表并跳到下一次迭代
如果sub_v==“null”:
nulls.append(sub_k)
持续
###在dict的子字典上打开另一个循环
对于v.items()中的sub_k2和sub_v2:
###若外部循环的值相同,则跳到网络迭代
如果sub_k2==sub_k或sub_v2==“null”:
持续
其他:
###如果子值的前3个字母相同
如果sub_v2.启动(sub_v_启动):
###如果不在列表中,请将键放入列表中(这是一种避免重复的简单方法,您也可以使用SET after等)
如果sub_k不等于:
equals.append(sub_k)
如果sub_k2不等于:
equals.append(sub_k2)
###如果前3个字母不同,则不相等的字母相同
其他:
如果分包商不平等:
不相等。附加(sub_k)
如果sub_k2不相等:
不相等。附加(sub_k2)
###将列表作为在每个最外层循环中更新的子字典的相对键的值
次比较[“等于”]=等于
子比较[“不平等”]=不平等
子比较[“空”]=空
###将子字典作为比较dict中最外层循环的相同键值
比较[k]=次比较
###打印结果
相比
{'b':{'unequals':[],'equals':['q','r','p'],'nulls':[]},'a':{'unequals':[],'equals':['e','d'],'nulls':['f']}
如果你想用一种特定的方式来排列新单词的键,你可以使用例如你的问题不是很清楚。例如,如果两个条目具有相同的值,但另外两个条目具有相同的值,但值不同,会发生什么情况?也许你可以提供一个例子来说明你想要实现什么?还有,你为什么要这样做?也许有一种更好的方法可以做你想做的事情?所以在上面的例子中,让我们迭代字典项,所以对于第一次迭代,键是'a',值是'{d:val1,e:val2,f:null}',所以我只想处理和比较a下的嵌套值,它们是val1,val2,null,并将它们分为3类,分别为相等、不相等和null,这使我找到了这个示例结构{a:{equal:[]、不等:[]、null:[]},而“b”也是如此。我想以这种方式组织数据,因为这是根据我的需要进行分类的最佳方式。但你并没有回答我的问题。你的python代码是无效的,因为你的键没有引号,但除此之外,你希望如何解释:
{'a':{'d':'val1','e':'val1','f':'val2','g':'val2'}
-显然d
等于e
和f
等于g
,但它们彼此不相等,所以你可能不想把它们都放在一堆里?很抱歉误会了。我应该把数字放进去的。当我说“val”时,它意味着一个浮动整数,类似于{'a':{'d':'20.1','e':'20.1','f':'20.2','g':'null'}}
重组为{'a':{'equals':['d','e'],'unequals':['f],'null':['g']}
,那么{'a':{'d':'20.1','e':'20.1','e','e','e','f':'f','20.2}呢?结果是什么?很好。清晰注释代码的伟大实践。