如何用字典推导式仅对嵌套字典的每个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
相关产品推荐
相关产品推荐

