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

如何用字典推导式仅对嵌套字典的每个title子键应用函数

解决嵌套字典中仅处理'title'子键的问题

嘿,我来帮你搞定这个问题!你现在遇到的核心问题是字典推导式没区分子键类型,导致所有子键都被误处理了;另外你的strip_non_en函数还有个小bug,得先修正它,不然处理逻辑根本不会生效。

第一步:修正移除非英文单词的函数

你的函数里执行了" ".join(...)但没把结果赋值给变量,直接返回了原字符串,等于没做任何处理。修改后的函数如下:

import nltk
# 首次运行需要下载brown语料
nltk.download('brown')

words = set(nltk.corpus.brown.words())

def strip_non_en(string, words):
    # 拆分字符串并过滤非英文单词
    filtered_words = [
        w for w in nltk.wordpunct_tokenize(string)
        # 保留英文单词或非字母字符(比如标点)
        if w.lower() in words or not w.isalpha()
    ]
    # 重新拼接成字符串并返回
    return " ".join(filtered_words)

第二步:编写精准的字典推导式

我们需要在外层遍历顶级字典的键值对,内层遍历子字典时只对'title'键应用处理函数,其他键直接保留原值:

# 你的原始示例数据
meta_data = {
    '12345.xml': {'author': ['Presley'], 'date': 1956, 'doi': None, 'title': 'Heartbreak Hotel'},
    '67890.xml': {'author': ['Iglesias'], 'date': 1972, 'doi': None, 'title': 'For a little bit of your love Por Un Poco De Tu Amor'}
}

# 仅处理title子键的字典推导式
cleaned_meta = {
    top_key: {
        sub_key: strip_non_en(sub_val, words) if sub_key == 'title' else sub_val
        for sub_key, sub_val in sub_dict.items()
    }
    for top_key, sub_dict in meta_data.items()
}

效果验证

运行后cleaned_meta的结果会是:

{
    '12345.xml': {'author': ['Presley'], 'date': 1956, 'doi': None, 'title': 'Heartbreak Hotel'},
    '67890.xml': {'author': ['Iglesias'], 'date': 1972, 'doi': None, 'title': 'For a little bit of your love'}
}

可以看到:

  • 'author'、'date'、'doi'完全保留了原始值
  • 'title'里的非英文词汇Por Un Poco De Tu Amor被成功移除了

内容的提问来源于stack exchange,提问作者Lorcán

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:19:40