在python中,我们可以得到一个键的父键路径,我的json如下所示。。 例如,如果输入a1:PROJ1/LOB1。列表[]中的所有键都是唯一的
{
'PROJ1': {
u'LOB1': [u'a1', u'a2'],
u'LOb2': [u'v1', u'v2'],
u'LOBA': [u'o1', u'oa', u'o2', u'o3'],
u'LOBX': [u'n1', u'n2'],
u'LOB': [u'b1', u'b2']
},
'PROJ12': {
u'LOBa': [u'aa1', u'aa2'],
u'LOBX': [u'vx1', u'vx2']
},
}
我在另一个线程上发现了这个,但它不适用于上述数据。失败原因:unhashable type: 'list'
def keypaths(myDict):
for key, value in myDict.items():
if isinstance(value, collections.Mapping):
for subkey, subvalue in self.keypaths(value):
yield [key] + subkey, subvalue
else:
yield [key], value
reverse_dict = {value: keypath for keypath, value in keypaths(example_dict)}
您需要深入查看返回值的
list
,以获得每个a1
,a2
。。。等等。您可以对keypaths
函数做一个小的修改来翻转返回的键/值:这假设您的所有值都是唯一的,否则路径将被覆盖。你知道吗
或者,您可以在不修改
keypaths
函数的情况下执行相同的操作(如果出于其他目的需要):注意,这个替代方法只适用于假设所有值都是
list
s的情况(否则字典理解就会失败)。你知道吗输出:
注意,这只适用于假设所有值都是
list
s(否则字典理解会失败),并且具有唯一的值(否则会覆盖重复值的键路径)。你知道吗现在,要获得
keypath
,您需要做的就是:相关问题 更多 >
编程相关推荐