如何在特定嵌套级别筛选嵌套词典?

2024-05-08 21:05:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将嵌套字典过滤到某个级别,例如:

d = {'fruit': {'sweet': {'green': 'apple', 'red': 'tomato'}, 'bitter': {'green': 'cucumber'}}}

我想编写一个函数filter_at_level( d, 2, lambda r: r == 'green' ),它只返回以下内容而不修改原始数据:

{'fruit': {'sweet': {'green': 'apple'}, 'bitter': {'green': 'cucumber'}}}

我应该避免递归吗?它能在没有递归的情况下高效地编写吗?你知道吗


Tags: lambda函数apple字典greenredfilter级别
1条回答
网友
1楼 · 发布于 2024-05-08 21:05:05
from itertools import ifilter

def f(d, func, l):
    if l == 0:
        return {k: d[k] for k in ifilter(func, d)}
    return {k: f(v, func, l - 1) for k, v in d.iteritems()}

d = {'fruit': {'sweet': {'green': 'apple', 'red': 'tomato'}, 'bitter': {'green': 'cucumber'}}}

print f(d, lambda k: k == 'green', 2)

或者如果您不想要空元素:

from itertools import ifilter

def f(d, func, l):
    if l == 0:
        return {k: d[k] for k in ifilter(func, d)}
    tmp = {k: f(v, func, l - 1) for k, v in d.iteritems()}
    return {k: v for k, v in tmp.iteritems() if v}

d = {'fruit': {'sweet': {'green': 'apple', 'red': 'tomato'}, 'bitter': {'green': 'cucumber'}, 'x': {'a': 'z'}}}

print f(d, lambda k: k == 'green', 2)

相关问题 更多 >

    热门问题