python - Python 检查字符串是否包含任何字典的键
问题描述
给定示例字典:
LANGUAGE_TO_ISO = {
"en": "en",
"eng": "en",
"english": "en",
"es": "es",
"spanish": "es",
...
}
和一个给定的示例字符串:
book_title = "The Dark Tower - english"
book_title = "The Dark Tower - eng"
book_title = "The Dark Tower 2 - english 2nd edition"
是否有一个我不知道的 Python 函数允许搜索字符串是否包含任何字典键然后返回相应的值,而不必在 ISO 字典中循环?
这样,我可以从一种语言的许多不同编写方式中提取 ISO 语言。
如果有人知道这样做的不那么肮脏的方式,请分享:)
更新:正如 Willem 提到的,忘记指定“english”、“eng”、“spanish”等将由单词分隔。点、逗号、连字符、空格、...
解决方案
这应该为您提供公共密钥:
set(book_title.split()).intersection(set(LANGUAGE_TO_ISO.keys()))
您可以在字典中查找以获取相应的值。
响应 OP 的评论,包括 shell 上的输出片段:
In [4]: LANGUAGE_TO_ISO = {
...: "en": "en",
...: "eng": "en",
...: "english": "en",
...: "es": "es",
...: "spanish": "es",
...: }
In [5]: book_title = "The Dark Tower - english"
In [6]: set(book_title.split()).intersection(set(LANGUAGE_TO_ISO.keys()))
Out[6]: {'english'}
推荐阅读
- mysql - mysql Rand() 函数导致意外的多行结果
- python - 如何使用 Python(套接字)从客户端向客户端发送和接收消息?
- c++ - C++ 隐式转换:良好的特异性还是对程序行为的危险?
- xml - 使用 xslt 合并两个 xml
- c# - 为什么 Assembly.GetType() 不适用于泛型类型实例?
- python - 如何使用for循环在pandas df中逐一添加列
- scala - Spark RDD 到数据框
- java - BasicDataSource 被 UrlDecodingDataSource 类型的不兼容 bean 实例覆盖
- git - Git - 查找上次跨多个存储库修改文件的时间?
- angular - 我正在尝试从 component.ts 文件中关闭 html boostrap 模态