You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用单行代码按函数规则过滤Python嵌套字典的二级键

嵌套字典过滤逻辑的单行代码实现

问题背景

我有如下格式的Python嵌套字典:

example ={'2020_01': {'PM0001': 1088, 'CA00006': 33, 'X00002': 125, 'J00009': 119, 'A0000S': 524},
 '2020_02': {'F00067': 3, 'P00001': 1104, 'X00002': 98, 'J0009': 36, 'A0000S': 539},
 '2020_03': {'P00001': 1200, 'Z78800': 45,'X00000': 84,'NK0000': 4,'A0000S': 577,'V000000':11}}

需要提取一个新字典,仅保留二级嵌套字典中键符合指定规则的键值对,规则由以下自定义函数定义:

def rule(string):
    # 这是示例规则,实际逻辑会复杂得多
    if string.startswith("P") or string.startswith("X"):
        if string[1] == "0":
            return True
    return False

目前已通过循环实现需求:

new_dict={}
for date,ussage in example.items():
    new_sub_dict = {key:value for key,value in ussage.items() if rule(key)==True}
    new_dict[date] = new_sub_dict
new_dict

希望将上述循环改写为单行代码。

解决方案

可以使用嵌套字典推导式实现单行代码,逻辑和原循环完全一致:

new_dict = {date: {k: v for k, v in usage.items() if rule(k)} for date, usage in example.items()}

细节说明

  • 外层推导式遍历原字典的每个日期键与对应二级字典
  • 内层推导式对二级字典的键值对过滤,只保留满足rule(k)的条目
  • rule(key)==True可简化为rule(key),因为函数本身返回布尔值

执行后得到的结果为:

{'2020_01': {'X00002': 125},
 '2020_02': {'P00001': 1104, 'X00002': 98},
 '2020_03': {'P00001': 1200, 'X00000': 84}}

内容的提问来源于stack exchange,提问作者JFerro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:25:15