【问题标题】:How to get keys from multiple values?如何从多个值中获取键?
【发布时间】:2021-08-09 10:58:51
【问题描述】:

我正在编写一个 Python 代码,它将使用 dict 将表情符号转换为文本,但我不知道如何从一个句子中的多个值(表情符号)中获取作为文本的键

emoji={
    'a':'????️',
    'b':'????️',
    'c':'????️',
    'd':'????️',
    'e':'????️',
    'f':'????️',
    'g':'????️',
    'h':'????️',
    'i':'????️',
    'j':'????️',
    'k':'????️',
    'l':'????️',
    'm':'????️',
    'n':'????️',
    'o':'????️',
    'p':'☺️',
    'q':'????️',
    'r':'????️',
    's':'????️',
    't':'????️',
    'u':'????️',
    'v':'????️',
    'w':'????️',
    'x':'????️',
    'y':'????️',
    'z':'????️',
}
output_text=''
input_text=str(input('Input:'))
for letter in input_text:
    if letter in emoji.values():
        output_text=output_text+emoji.keys(letter)
    else:
        output_text=output_text+letter

print(output_text)

此代码将遍历句子中的每个字符,然后检查该字符是否是字典中的表情符号,如果是,它将获取表情符号(值)的文本(键)。

编辑#1: 更新代码:

emoji_dict={k:v for v,k in emoji.items()}

print(emoji_dict)
input_text=str(input('Input:'))
output_text=''
for letter in input_text:
    if letter in emoji_dict:
        print(emoji_dict[letter])
        output_text=output_text+emoji_dict[letter]
    else:
        output_text=output_text+letter

print(output_text)

【问题讨论】:

  • 您的 dict 是否实际上与您想要做的完全相反!
  • 嗯,实际上我还有一个代码,它使用这个字典将文本翻译成表情符号(我取了一小部分代码,这样更容易阅读)。我知道我可以写另一个字典,但我想了解更多关于 Python 字典的信息,而且我懒得写另一个 :) 感谢您对我的帖子发表评论:D
  • 那你得说清楚!
  • 请更新您的问题,使其有意义。
  • 我不确定您要完成什么,但我的印象是它是一个来回转换表。如果是这种情况,请考虑使用str.maketrans()str.translate()。您的代码可能会缩短到两三行。

标签: python python-3.x dictionary


【解决方案1】:

反转字典。然后就是简单的查找了。

emoji_to_letter = {v: k for k, v in emoji.items()}

不过,emoji 值中还有其他字符,即 U+FE0F VARIATION SELECTOR-16,您需要先删除这些字符,然后才能进行字符查找。

emoji = {k: v.strip('\ufe0f') for k, v in emoji.items()}

最后,avoid building strings in a for-loop。您可以使用str.maketrans()str.translate() 代替。

table = str.maketrans(emoji_to_letter)
output_text = input_text.translate(table)

但无论如何,更通用的最佳做法是像这样使用''.join()

output_text = ''.join(emoji_to_letter.get(char, char) for char in input_text)

大家一起

emoji_to_letter = {v.strip('\ufe0f'): k for k, v in emoji.items()}
table = str.maketrans(emoji_to_letter)

input_text = 'bruh ?'
output_text = input_text.translate(table)
print(output_text)  # -> bruh c

【讨论】:

    猜你喜欢
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多