python - 如何使用 Python 删除字典中仅包含表情符号的元素
问题描述
当我有一个像这样的字典时:
dict = {'xyz': 'Sooo ein schönes Bild von dir ', 'xyz2': '✨✨✨', 'xyz3': 'toll, super schön'}
如何使用“表情符号”仅查找带有表情符号的元素(即此处键 xyz2 的值)并将其从字典中删除?
我使用 Python 的表情符号模块。https://pypi.org/project/emoji/
解决方案
首先考虑如何使用“官方”emoji
包功能检测表情符号demojize
。它可以将字符串中的表情符号解码为标记,因此我们只需要检测是否有任何非标记元素。每个标记都是一个以冒号开头和结尾的字符串,例如 :smile: 或 :heart:。因此,如果 demojized 字符串不是从标记(分号)开始,或者标记后跟非标记 - 那是非表情符号存在的标志。
def are_emojis(s):
s = s.replace(":", "x") # colons from the original text might intefere with token markup
s = emoji.demojize(s)
if not s.startswith(':') or len(s) < 3:
return False # first symbol is not emoji
s = s[1:-1] # drop the initial and the last colon
s = s.replace("::", "") # delete double colons
return ":" not in s
for k in list(d):
if are_emojis(d[k]):
del d[k]
可能,更直观的解决方案是使用该包中未记录的正则表达式表情符号匹配器,或者,对于简单的情况,甚至是下面的表情符号列表
from emoji import UNICODE_EMOJI
def is_emoji(s):
return s in UNICODE_EMOJI
for k in list(dict):
if all(map(is_emoji, dict[k])):
del dict[k]
遗憾的是,在多符号表情符号序列的情况下,当表情符号与修饰符或组合器(例如肤色或零宽度连接器)一起使用时,它会失败。一种解决方法是将组合器和修饰符添加到该表情符号列表中,但随后程序还将删除仅包含修饰符和组合器的字符串。更好地使用emoji
包正则表达式。
如果您更喜欢构建没有某些元素的新字典,请参阅https://thispointer.com/python-filter-a-dictionary-by-conditions-on-keys-or-values/上的食谱
推荐阅读
- unity3d - 在增强现实中将 3d 对象放置在真实对象上
- hibernate - Hibernate 带宽问题:比 SQL Developer 花费更多的时间
- azure - 带有 PowerShell 5+ 的 Azure 的应用程序、创建日期、权限和 2FA 设置列表
- go - 如果我的密钥都被命名为“密钥”,如何从 BSON 获取 JSON?
- git - 列出 git 中最新编辑的文件
- javascript - 我需要在 Gatsby 插件中设置什么?
- selenium - webdriver W3C 协议是什么意思。它与 JSON 协议有何不同
- java - HTTP 响应显示 Accept=multipart/form-data 但未设置此标头并设置 CamelAcceptContentType, "application/json"
- oracle - 计数在使用条件的触发器中不起作用
- python - 如何读取文本文件的特定部分(Py 3x)