【问题标题】:How to Print Unicode Emojis from Dictionary's Value如何从字典的值中打印 Unicode 表情符号
【发布时间】:2020-09-07 18:39:20
【问题描述】:

Python 新手,一整天都在为此绞尽脑汁。

我正在使用表情符号的 unicode 值

按预期打印 unicode 值:

print("\U0001f600")

产量

>>> ????

但是,我的用例有点复杂。我已经使用熊猫和数据框导入并格式化了一大组表情符号。通过一个可能比需要更复杂的 .tolist() 和压缩序列,我已经找到了我认为我需要的字典格式。

带有小数据集的 .tolist() 示例:

emoji_list = ['#️⃣', '*️⃣', '0️⃣', '1️⃣']

grouped_code_list = [['00000023', '0000FE0F', '000020E3'], ['0000002A', '0000FE0F', '000020E3'], ['00000030', '0000FE0F', '000020E3'], ['00000031', '0000FE0F', '000020E3']]

short_name_list = ['keycap: #', 'keycap: *', 'keycap: 0', 'keycap: 1',]

keyword_list = ['keycap', 'keycap', 'keycap', 'keycap']

我将以上四个列表格式化成我的目标字典:

# list into a list of lists
def extractDigits(list):
    keyword_list_list =[]
    for keyword in list:
        sub = keyword.split(', ')
        keyword_list_list.append(sub)

    return (keyword_list_list)

# implement extractDigits(list)
listed_keyword_list = extractDigits(keyword_list)

description_list = list(zip(short_name_list, listed_keyword_list))

emoji_code_list = list(zip(grouped_code_list, description_list))

emojiDictionary = dict(zip(emoji_list, emoji_code_list))

上面的代码给了我一个由以下键/值对组成的字典:

键:来自 emoji_list 的表情符号作为键

值: 元组 1. 表示该表情符号的 unicode 值(来自 grouped_code_list)和 2. 包含表情符号 CLDR 短名称和相关关键字列表的第二个元组(来自描述列表)

打印该字典如下所示:

print(emojiDictionary)
>>> {'#️⃣': (['00000023', '0000FE0F', '000020E3'], ('keycap: #', ['keycap'])), '*️⃣': (['0000002A', '0000FE0F', '000020E3'], ('keycap: *', ['keycap'])), '0️⃣': (['00000030', '0000FE0F', '000020E3'], ('keycap: 0', ['keycap'])), '1️⃣': (['00000031', '0000FE0F', '000020E3'], ('keycap: 1', ['keycap']))}

打印它看起来更漂亮看起来像这样:

for key in emojiDictionary:
    print("")
    print ("key: " + key)
    for values in emojiDictionary[key]:
        print ("value: " + str(values))


>>> key: #️⃣
>>> value: ['00000023', '0000FE0F', '000020E3']
>>> value: ('keycap: #', ['keycap'])

>>> key: *️⃣
>>> value: ['0000002A', '0000FE0F', '000020E3']
>>> value: ('keycap: *', ['keycap'])

>>> key: 0️⃣
>>> value: ['00000030', '0000FE0F', '000020E3']
>>> value: ('keycap: 0', ['keycap'])

>>> key: 1️⃣
>>> value: ['00000031', '0000FE0F', '000020E3']
>>> value: ('keycap: 1', ['keycap'])

问题

我的目标是能够打印字典中的 unicode 值,如果有多个则加入,并添加“\U”来打印表情符号本身。

这是几乎所有这些的代码:

print_first_emoji = str(r'\U' + r'\U'.join(emojiDictionary["#️⃣"][0]))

产量

>>> \U00000023\U0000FE0F\U000020E3

比较:

print("\U00000023\U0000FE0F\U000020E3")

产量

>>> #️⃣

我尝试了很多不同的方法,主要涉及转义/不转义反斜杠的不同方式。

例如,如果我在 .tolist() 之前将“\U”添加到源数据帧中,则结果列表会添加一个“\”以将“\”转义。所以,我的 grouped_code_list 看起来像这样:

grouped_code_list = [['\\U00000023', '\\U0000FE0F', '\\U000020E3'], ['\\U0000002A', '\\U0000FE0F', '\\U000020E3'], ['\\U00000030', '\\U0000FE0F', '\\U000020E3'], ['\\U00000031', '\\U0000FE0F', '\\U000020E3']]

我考虑过使用 CLDR 短名称进行打印,但使用 unicode 的重点是我通常可以打印会引发此错误的表情符号: "SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-19: unknown Unicode character name"

我更愿意在必要时选择使用多个 unicode 值构建某些表情符号,而不是因为无法识别 CLDR 短名称而丢弃数百个表情符号。

有没有人有解决方案,一种或另一种方式?这些打印方式我必须遗漏一些东西吗?

【问题讨论】:

    标签: python python-3.x unicode emoji python-unicode


    【解决方案1】:

    看起来这些值是以十六进制格式表示的 32 位数字列表。 这可能会在understanding unicode 中帮助您。

    >>> a = ['00000023', '0000FE0F', '000020E3'] # list of values
    >>> b = [int(i, 16) for i in a] # convert them to integers, base 16 since they were hex strings
    >>> b
    [35, 65039, 8419]
    >>> c = [chr(i) for i in b] # get the characters for them
    >>> c
    ['#', '️', '⃣']
    >>> print(''.join(c)) # join those characters
    #️⃣
    >>> print(''.join(chr(int(i, 16)) for i in a)) #concise
    #️⃣
    >>>
    

    【讨论】:

      【解决方案2】:

      str(r'\U' + r'\U'.join(emojiDictionary["#️⃣"][0])) - 差不多了,但你不需要str(它已经一个字符串),你需要ast.literal_eval

      from ast import literal_eval
      print(literal_eval(r'"\U' + r'\U'.join(emojiDictionary["#️⃣"][0])+'"'))
      

      然而,主要问题是为什么?您已经将表情符号作为键,为什么不直接打印呢?这整个 emojiDictionary 用于是什么?

      【讨论】:

      • 你真是个天才,谢谢!让我觉得我应该在几个小时前问。我在这里玩一些不同的东西只是为了学习大部分内容。至于为什么我不打印字典键来检索表情符号——我遇到了这样的问题,当我打印一个由几个不同的 unicode 值组成的表情符号键时,它会单独打印每个值而不是表情符号.这个问题似乎和这个问题一样难以解决,所以我想我只是选了一个兔子洞。
      • 字典本身就是根据情感分析返回一个表情符号。大多数返回 0.0,但有些不返回。另外,我也在玩基于其他价值观的回归。至于为什么我以我的方式做任何事情——我一个月前才开始学习,除了 html、css 和一些 javascript 之外没有任何经验,所以我和你一样迷失在那个 Q 上。说真的,感谢您的帮助!
      • 啊,你遇到了 Unicode 字符组合的问题。您可能对unicodedata.normalize 功能感兴趣。
      猜你喜欢
      • 2019-09-06
      • 2016-11-06
      • 1970-01-01
      • 1970-01-01
      • 2020-06-04
      • 1970-01-01
      • 2020-06-21
      • 2020-03-28
      • 2014-01-23
      相关资源
      最近更新 更多