如何在 Python 的字典中删除仅包含表情符号的元素
How to delete elements with just emojis in a dictionary with Python
当我有这样的命令时:
dict = {'xyz': 'Sooo ein schönes Bild von dir ', 'xyz2': '✨✨✨', 'xyz3': 'toll, super schön'}
如何使用“emoji”来查找仅包含 emoji 的元素(即此处的键 xyz2 的值)并将其从字典中删除?
我使用 Python 的表情符号模块。 https://pypi.org/project/emoji/
首先考虑如何使用'official'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/
处的食谱
当我有这样的命令时:
dict = {'xyz': 'Sooo ein schönes Bild von dir ', 'xyz2': '✨✨✨', 'xyz3': 'toll, super schön'}
如何使用“emoji”来查找仅包含 emoji 的元素(即此处的键 xyz2 的值)并将其从字典中删除?
我使用 Python 的表情符号模块。 https://pypi.org/project/emoji/
首先考虑如何使用'official'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/
处的食谱