【发布时间】: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