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

如何高效筛选Python字典中的指定键值对子集?

问题

我有一个大型字典:

{
        "configGlossary:installationAt": "Philadelphia, PA",
        "configGlossary:adminEmail": "ksm@pobox.com",
        "configGlossary:poweredBy": "Cofax",
        "configGlossary:poweredByIcon": "/images/cofax.gif",
        "configGlossary:staticPath": "/content/static",
        "templateProcessorClass": "org.cofax.WysiwygTemplate",
        "templateLoaderClass": "org.cofax.FilesTemplateLoader",
        "templatePath": "templates",
        "templateOverridePath": "",
        "defaultListTemplate": "listTemplate.htm",
        "defaultFileTemplate": "articleTemplate.htm",
        "useJSP": false,
        "jspListTemplate": "listTemplate.jsp",
        "jspFileTemplate": "articleTemplate.jsp",
        "cachePackageTagsTrack": 200,
        "cachePackageTagsStore": 200,
        "cachePackageTagsRefresh": 60,
        "cacheTemplatesTrack": 100,
        "cacheTemplatesStore": 50,
        "cacheTemplatesRefresh": 15,
        "cachePagesTrack": 200,
        "cachePagesStore": 100,
        "cachePagesRefresh": 10,
        "cachePagesDirtyRead": 10,
        "searchEngineListTemplate": "forSearchEnginesList.htm",
        "searchEngineFileTemplate": "forSearchEngines.htm",
        "searchEngineRobotsDb": "WEB-INF/robots.db",
        "useDataStore": true,
        "dataStoreClass": "org.cofax.SqlDataStore",
        "redirectionClass": "org.cofax.SqlRedirection",
        "dataStoreName": "cofax",
        "dataStoreDriver": "com.microsoft.jdbc.sqlserver.SQLServerDriver",
        "dataStoreUrl": "jdbc:microsoft:sqlserver://LOCALHOST:1433;DatabaseName=goon",
        "dataStoreUser": "sa",
        "dataStorePassword": "dataStoreTestQuery",
        "dataStoreTestQuery": "SET NOCOUNT ON;select test='test';",
        "dataStoreLogFile": "/usr/local/tomcat/logs/datastore.log",
        "dataStoreInitConns": 10,
        "dataStoreMaxConns": 100,
        "dataStoreConnUsageLimit": 100,
        "dataStoreLogLevel": "debug",
        "maxUrlLength": 500
}

需要提取指定键值对,得到如下精简字典:

{       
        "cachePackageTagsTrack": 200,
        "cachePackageTagsStore": 200,
        "cachePackageTagsRefresh": 60,
        "cacheTemplatesTrack": 100,
        "cacheTemplatesStore": 50,
        "cacheTemplatesRefresh": 15,
        "cachePagesTrack": 200,
        "cachePagesStore": 100,
        "cachePagesRefresh": 10,
        "cachePagesDirtyRead": 10
}

没有现成方法直接实现,且要处理大量同类循环数据,求快速高效的精简方案。


高效精简方案

1. 预存目标键集合 + 字典推导式

集合的键查找是O(1)时间复杂度,适合处理大量数据时重复使用:

# 定义要保留的键集合(集合比列表查找快)
target_keys = {
    "cachePackageTagsTrack",
    "cachePackageTagsStore",
    "cachePackageTagsRefresh",
    "cacheTemplatesTrack",
    "cacheTemplatesStore",
    "cacheTemplatesRefresh",
    "cachePagesTrack",
    "cachePagesStore",
    "cachePagesRefresh",
    "cachePagesDirtyRead"
}

# 原始大字典
original_dict = {
    # 你的大字典内容
}

# 生成精简字典
trimmed_dict = {k: v for k, v in original_dict.items() if k in target_keys}

如果批量处理多个大字典,把target_keys定义在循环外,避免重复创建,能进一步提升效率。

2. 生成器表达式配合dict()构造

和字典推导式效率接近,写法略有不同:

trimmed_dict = dict((k, original_dict[k]) for k in target_keys if k in original_dict)

适合提前确定目标键大概率存在的场景,if k in original_dict可避免KeyError。

3. 直接按键提取(键固定场景)

如果目标键固定且无需动态调整,直接提取速度最快:

trimmed_dict = {
    "cachePackageTagsTrack": original_dict["cachePackageTagsTrack"],
    "cachePackageTagsStore": original_dict["cachePackageTagsStore"],
    "cachePackageTagsRefresh": original_dict["cachePackageTagsRefresh"],
    "cacheTemplatesTrack": original_dict["cacheTemplatesTrack"],
    "cacheTemplatesStore": original_dict["cacheTemplatesStore"],
    "cacheTemplatesRefresh": original_dict["cacheTemplatesRefresh"],
    "cachePagesTrack": original_dict["cachePagesTrack"],
    "cachePagesStore": original_dict["cachePagesStore"],
    "cachePagesRefresh": original_dict["cachePagesRefresh"],
    "cachePagesDirtyRead": original_dict["cachePagesDirtyRead"]
}

性能优化要点

  • 用集合存目标键:集合in操作是O(1),列表是O(n),大量数据下差距明显。
  • 复用目标键集合:批量处理时,避免在循环内重复创建target_keys。
  • 优先用字典推导式:Python中字典推导式的执行效率高于普通循环+dict.update()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:30:51