使用collections.Counter来计数不同颜色的表情符号

发布于 2021-01-29 16:21:27

我想使用collections.Counter类来计算字符串中的表情符号。它通常可以正常工作,但是,当我引入彩色表情符号时,表情符号的颜色部分会与表情符号分开,如下所示:

>>> import collections
>>> emoji_string = "👌🏻👌🏼👌🏽👌🏾👌🏿"
>>> emoji_counter = collections.Counter(emoji_string)
>>> emoji_counter.most_common()
[('👌', 5), ('🏻', 1), ('🏼', 1), ('🏽', 1), ('🏾', 1), ('🏿', 1)]

我怎样才能使most_common()函数返回如下所示的内容:

[('👌🏻', 1), ('👌🏼', 1), ('👌🏽', 1), ('👌🏾', 1), ('👌🏿', 1)]

我正在使用Python 3.6

关注者
0
被浏览
198
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您必须将字符串拆分为单独的群集。您的每个表情符号实际上都是 两个代码点 ;表情符号和EMOJI MODIFIER FITZPATRICK TYPE
    X代码点:

    >>> print(emoji_string[0])
    👌
    >>> print(emoji_string[1])
    🏻
    >>> print(emoji_string[:2])
    👌🏻
    >>> print(ascii(emoji_string[:2]))
    '\U0001f44c\U0001f3fb'
    >>> import unicodedata
    >>> unicodedata.name(emoji_string[1])
    'EMOJI MODIFIER FITZPATRICK TYPE-1-2'
    

    您可以使用正则表达式来保留前面的表情符号:

    import re
    
    char_with_modifier = re.compile(r'(.[\U0001f3fb-\U0001f3ff]?)')
    split_emoji = char_with_modifier.findall(emoji_string)
    

    并计算结果。

    演示:

    >>> import re
    >>> from collections import Counter
    >>> emoji_string = "👌🏻👌🏼👌🏽👌🏾👌🏿"
    >>> char_with_modifier = re.compile(r'(.[\U0001f3fb-\U0001f3ff]?)')
    >>> Counter(char_with_modifier.findall(emoji_string))
    Counter({'👌🏻': 1, '👌🏼': 1, '👌🏽': 1, '👌🏾': 1, '👌🏿': 1})
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看