python字典嵌套字典取键_python:一种在嵌套字典中获取详尽,有序的键列表的方法吗?...

详尽:

– 字典中的所有键,即使键位于嵌套字典中,该字典是前一级字典键的值.

排序方式:

– 这是为了确保按键始终以相同的顺序返回

嵌套是任意深度的.非递归算法是优选的.

level1 = {

'a' : 'aaaa',

'level2_1' : {'b': 'bbbbb', 'level3': {'c': 'cccc', 'd': 'dddddd'} },

'level2_2' : { 'z': 'zzzzzzz' }

}

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

棘手= {‘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)

因为各种嵌套dicts的处理顺序对于此目的无关紧要.

编辑:OP评论抱怨如果dict没有嵌套,它不起作用,而是在列表中(我回答说它也可能在一个元组中,一个具有每个实例或每个类的属性的对象[也许]它的一个基类],一个架子,和许多其他隐藏房子周围的词汇的方法;-).如果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,dictionary

来源: https://codeday.me/bug/20190724/1518669.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值