You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现数字与单词互转:能否用单字典并保证列表顺序?

用单个字典实现数字与单词的双向转换 + 解决列表顺序问题

嘿,我来帮你搞定这个问题!你想用单个字典实现数字和单词的双向转换,还遇到了输出列表顺序不对的问题,这两个需求其实都很好解决,咱们一步步来:

一、只用一个字典实现双向转换的两种方法

完全不用维护两个键值对互换的字典,只需要一个核心字典,就能搞定双向转换:

方法1:动态生成反向映射(推荐)

先定义你的核心字典,比如数字到单词的映射:

num_word_map = {
    0: 'zero',
    1: 'one',
    2: 'two',
    3: 'three',
    # 这里继续添加你的其他键值对
}

当需要把单词转数字时,用字典推导式临时生成反向映射就行,不用额外存一个新字典:

def word_to_num(words):
    # 临时生成单词到数字的映射
    word_num_map = {word: num for num, word in num_word_map.items()}
    # 按输入的单词顺序返回对应数字列表
    return [word_num_map[word] for word in words]

这样你只需要维护num_word_map这一个字典,反向映射在需要的时候生成,省心又省事。

方法2:直接遍历原字典查找(适合小字典)

如果你的字典键值对不多,也可以直接遍历原字典的键值对来找匹配项,不用生成反向字典:

def word_to_num_single(word):
    for num, w in num_word_map.items():
        if w == word:
            return num
    # 找不到的话抛个错误提示
    raise ValueError(f"没找到对应的数字:{word}")

这种方法适合字典规模小的场景,不用额外生成字典。

二、解决列表输出顺序不符合预期的问题

你说输出列表顺序不对,大概率是遍历方式或者处理输入的顺序出了问题,分两种常见情况解决:

情况1:按输入数字/单词的顺序输出

如果你的需求是输出顺序和输入顺序完全一致,那只要按输入的顺序逐个处理就行:

  • 数字转单词:直接遍历输入的数字列表,用原字典取值,比如:
    def num_to_word(nums):
        return [num_word_map[num] for num in nums]
    
    输入[2, 0, 1],输出就是['two', 'zero', 'one'],完全跟着输入顺序走。
  • 单词转数字:用上面方法1的列表推导式,也是按输入的单词顺序逐个查找,输出顺序自然和输入一致。

情况2:按特定规则排序输出(比如字母顺序、数字大小)

如果你的需求是按特定规则排序(比如按单词的字母顺序输出数字,或者按数字大小输出单词),那可以用sorted()函数加自定义排序规则:
比如按单词的字母顺序排序后输出数字列表:

# 按单词字母顺序排序键值对
sorted_items = sorted(num_word_map.items(), key=lambda x: x[1])
# 提取排序后的数字列表
sorted_nums = [num for num, word in sorted_items]
# 提取排序后的单词列表
sorted_words = [word for num, word in sorted_items]

这样就能得到符合你要求的有序列表了。

完整示例代码

num_word_map = {
    0: 'zero',
    1: 'one',
    2: 'two',
    3: 'three',
    4: 'four'
}

# 数字转单词(按输入顺序输出)
def num_to_word(nums):
    return [num_word_map[num] for num in nums]

# 单词转数字(按输入顺序输出)
def word_to_num(words):
    word_num_map = {word: num for num, word in num_word_map.items()}
    return [word_num_map[word] for word in words]

# 测试用例
print(num_to_word([3, 1, 0]))  # 输出: ['three', 'one', 'zero']
print(word_to_num(['four', 'two']))  # 输出: [4, 2]

# 按单词字母顺序输出数字列表
sorted_by_word = sorted(num_word_map.items(), key=lambda x: x[1])
print([num for num, word in sorted_by_word])  # 输出: [4, 1, 3, 2, 0]

这样既实现了单个字典的双向转换,又能灵活控制输出列表的顺序啦!

内容的提问来源于stack exchange,提问作者Anand.py

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:11:08