Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python嵌套字典按键值比较_Python_Python 3.x - Fatal编程技术网

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
values
val1
=
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}呢?结果是什么?很好。清晰注释代码的伟大实践。