gpt4 book ai didi

python:一种在嵌套字典中获取详尽的排序键列表的方法?

转载 作者:太空宇宙 更新时间:2023-11-03 12:52:10 24 4
gpt4 key购买 nike

详尽无遗:
- 字典中的所有键,即使键位于嵌套字典中,该字典是上一级字典键的值。

已排序:
- 这是为了确保 key 始终以相同的顺序返回

嵌套任意深。首选非递归算法。

level1 = {
'a' : 'aaaa',
'level2_1' : {'b': 'bbbbb', 'level3': {'c': 'cccc', 'd': 'dddddd'} },
'level2_2' : { 'z': 'zzzzzzz' }
}

注意:字典值可以包括列表(可以有字典作为元素),例如

tricky = {'category': [{'content': 'aaaaa'}, {'content': 'bbbbbb'}]}

最佳答案

def _auxallkeys(aset, adict):
aset.update(adict)
for d in adict.itervalues():
if isinstance(d, dict):
_auxallkeys(aset, d)

def allkeys(adict):
aset = set()
_auxallkeys(aset, adict)
return sorted(aset)

是显而易见的(递归)解决方案。消除递归:

def allkeys(adict):
aset = set()
pending = [adict]
while pending:
d = pending.pop()
aset.update(d)
for dd in d.itervalues():
if isinstance(dd, dict):
pending.append(dd)
return sorted(aset)

因为处理各种嵌套字典的顺序对此并不重要。

编辑:OP 评论提示说,如果字典不是嵌套的,而是在 list 中,它就不起作用(我回答说它也可能是在一个元组中,一个对象具有每个实例或每个类的属性[可能是其基类],一个架子,以及许多其他隐藏房子周围的字典的方法;-)。如果 OP 愿意准确地定义他所说的“嵌套”的含义(显然与普通凡人对所讨论的词的含义不同),那么帮助他可能会更容易。同时,这是一个涵盖列表(和元组,但生成器、许多 itertools 类的实例、架子等的实例)的版本;

def allkeys(adict):
aset = set()
pending = [adict]
pendlis = []

def do_seq(seq):
for dd in seq:
if isinstance(dd, dict):
pending.append(dd)
elif isinstance(dd, (list, tuple)):
pendlis.append(dd)

while pending or pendlis:
while pending:
d = pending.pop()
aset.update(d)
do_seq(d.itervalues())
while pendlis:
l = pendlis.pop()
do_seq(l)

return sorted(aset)

关于python:一种在嵌套字典中获取详尽的排序键列表的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2792641/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com