【发布时间】:2019-05-25 12:54:21
【问题描述】:
我想对深度嵌套字典中的所有列表进行排序。它基本上是一个 JSON 对象,它在列表中深度嵌套字典,然后在字典中进行列表。我要做的就是解析所有叶节点的所有字典键,并对我在途中遇到的所有列表进行排序。基本上,任何直接可用的列表或给定字典对象的深层都应该被排序,并且应该返回包含所有排序列表的同一个字典。
我尝试对 dict 对象进行递归,以将遇到的任何 dict 对象传递给递归方法,并在遇到时对列表进行排序。但是,当列表中有一个 dict,然后该 dict 对象中有另一个列表时,它们无法产生结果。
以下示例 JSON:
my_json = {
a: {
b: {
c: [
{
d: [
{ f: 'some_string' }
]
},
{
e: {
g: [
h: 'another string'
]
}
}
]
}
}
z: [
b: {
c: [
{
d: [
{ f: 'some_string1' }
]
},
{
e: {
g: [
h: 'another string1'
]
}
}
]
},
x: {
c: [
{
d: [
{ f: 'some_string2' }
]
},
{
e: {
g: [
h: 'another string2'
]
}
}
]
}
]
}
def gen_dict_extract(input_dict):
result_obj = input_dict;
if hasattr(var, 'iteritems'):
for k, v in var.iteritems():
if isinstance(v, dict):
for result in gen_dict_extract(v):
yield result
elif isinstance(v, list):
v.sort();
for d in v:
for result in gen_dict_extract(d):
yield result
输出期望只是对所有列表进行排序,而不管它们位于何处。我什至可以对字典中的每个项目进行排序,但我需要列表排序。
这里举个小例子来解释一下输出:
old_json = {
'x': [
{
'z': {
'y': ['agsd', 'xef', 'sdsd', 'erer']
}
},
{
's': {
'f': 'ererer',
'd': [5, 6, 2, 3, 1]
}
}
]
}
new_json = {
'x': [
{
's': {
'f': 'ererer',
'd': [1, 2, 3, 5, 6]
}
},
{
'z': {
'y': ['agsd', 'erer', 'sdsd','xef']
}
}
]
}
Something like above.
【问题讨论】:
-
请给minimal reproducible example 说明您尝试过的内容以及具体问题。
-
我知道您已经非常努力地解释了您正在寻找的输出,但我仍然不明白。您能否更新您的帖子,包括示例 JSON 将被显式转换为的内容?请在问题中!
-
请添加您的预期输出。这将帮助我们轻松解决您的问题。
-
完成.. 请看一下。请忽略我的代码,因为它可能无法满足我正在寻找的确切目的。
-
请重新访问您的输入数据。好像有一些语法错误
标签: python