这是我的示例Json数据。
dict = {'Headers 1': {'sub head 1': { 'birds':['Item 1.1.1',
'Item 1.1.2',
'Item 1.1.3',
'Item 1.1.4'],
'animals':['Item 1.1.1',
'Item 1.1.2',
'Item 1.1.3',
'Item 1.1.4']
},
'sub head 2': { 'birds':['Item 1.1.1',
'Item 1.1.2',
'Item 1.1.3',
'Item 1.1.4'],
'books':['Item 1.1.1',
'Item 1.1.2',
'Item 1.1.3',
'Item 1.1.4']
},
},
'Headers 2': {'sub head 1': { 'bottles':['Item 1.1.1',
'Item 1.1.2',
'Item 1.1.3',
'Item 1.1.4'],
'animals':['Item 1.1.1',
'Item 1.1.2',
'Item 1.1.3',
'Item 1.1.4']
},
'sub head 2': { 'books':['Item 1.1.1',
'Item 1.1.2',
'Item 1.1.3',
'Item 1.1.4'],
'birds':['Item 1.1.1',
'Item 1.1.2',
'Item 1.1.3',
'Item 1.1.4']
}
},
'Headers 3': {'sub head 1': { 'bottles':['Item 1.1.1',
'Item 1.1.2',
'Item 1.1.3',
'Item 1.1.4'],
'birds':['Item 1.1.1',
'Item 1.1.2',
'Item 1.1.3',
'Item 1.1.4']
}
}
}
在此Json数据中,我想获取所有子标头的Keys的唯一集合。我的结果应该是
['animals','birds','books','bottles']
我将告诉我到目前为止的步骤,
获取dict的所有键。即
dict.keys()
逐个迭代键获得父键的每个键。
迭代子标题键并获取子标题键的所有子键。
现在我不知道如何将子键存储到python中的唯一集?我该如何找到唯一列表?我可以对列表进行排序吗?
答案 0 :(得分:1)
假设您希望结果为无序,则对3个级别进行深度迭代,并在第3个级别上按set()
键:
print(set(k for outer in d.values() for inner in outer.values() for k in inner))
# {'birds', 'books', 'animals', 'bottles'}
如果您想要一个列表,请包裹list()
:
print(list(set(k for outer in d.values() for inner in outer.values() for k in inner)))
# ['birds', 'books', 'bottles', 'animals']
如果要有一个排序列表,请包装sorted()
:
print(sorted(set(k for outer in d.values() for inner in outer.values() for k in inner)))
# ['animals', 'birds', 'books', 'bottles']
如果要获得 ordered 结果,请保留可见集以跟踪重复项并将结果存储在列表中:
seen = set()
result = []
for outer in d.values():
for inner in outer.values():
for k in inner:
if k not in seen:
seen.add(k)
result.append(k)
print(result)
# ['birds', 'animals', 'books', 'bottles']
以上内容也不关心前两个级别的键,因此您可以遍历字典values()
。
注意:命名变量dict
并不是一个好主意,因为它会掩盖内置的dict()
函数。
答案 1 :(得分:1)
可以使用settime7 = timeM;
。像这样:
set
就个人而言,
我发现此语法比理解语法更易读。她跟随你的流程,可以轻松地提出一个断点并了解你在做什么。