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

Python字典值位置交换方法及基于凯撒密码的数字映射加密字典调整问题

问题1:如何在Python字典中交换或修改值的位置?

操作起来其实很简单,分两种场景说:

  • 修改单个值:直接通过键重新赋值就行。比如你有字典my_dict = {'a': 1, 'b': 2},要把'b'的值改成3,直接写my_dict['b'] = 3就搞定了。

  • 交换两个值的位置:可以用临时变量过渡,或者用Python的解包语法更简洁。比如交换my_dict中'a'和'b'的值:

    my_dict = {'a': 1, 'b': 2}
    # 方法1:临时变量过渡
    temp = my_dict['a']
    my_dict['a'] = my_dict['b']
    my_dict['b'] = temp
    
    # 方法2:解包语法(更清爽)
    my_dict['a'], my_dict['b'] = my_dict['b'], my_dict['a']
    

如果需要批量调整多个值,循环遍历字典的键值对,根据条件修改映射关系就行。


问题2:基于凯撒密码调整字典映射的解决方案

先拆解你的需求:当密钥为D3时,字典要变成{0: 'd', 1: 'e', 2: 'f', 3: 'a', 4: 'b', 5: 'c', 6: 'g', 7: 'h'...},本质是把字母表的前3个字符(a、b、c)移到d、e、f之后,后面的字符保持原顺序。

下面是修正并优化后的代码,我会逐段解释:

import string

def build_shifted_dict(shift):
    # 获取完整小写字母表并转为列表
    lowercase = list(string.ascii_lowercase)
    # 把前shift个字符移到列表末尾,生成偏移后的字母序列
    shifted_letters = lowercase[shift:] + lowercase[:shift]
    # 构建键为0-25、值为偏移后字母的字典
    return {i: char for i, char in enumerate(shifted_letters)}

# 处理用户输入
message = input("Enter a message\n")
key_input = input("Enter a key\n")

# 解析密钥:兼容「字母+数字」或纯字母输入
shift = 0
if key_input:
    # 先提取密钥中的数字部分作为偏移量
    num_part = ''.join([c for c in key_input if c.isdigit()])
    if num_part:
        shift = int(num_part)
    else:
        # 没有数字的话,取第一个字母对应的索引(a=0,d=3)作为偏移量
        first_char = key_input[0].lower()
        shift = string.ascii_lowercase.index(first_char)

# 生成调整后的字典
shifted_dict = build_shifted_dict(shift)
print("调整后的字典:", shifted_dict)

# 修复加密逻辑:避免重复添加字符,兼容非字母内容
encrypted = []
for val in message.lower():  # 统一转小写处理,避免大小写问题
    if val in string.ascii_lowercase:
        # 找到字母对应的键,加1后加入加密列表
        for key, char in shifted_dict.items():
            if char == val:
                encrypted.append(str(key + 1))
                break
    else:
        # 非字母字符(空格、标点等)直接保留
        encrypted.append(val)

# 用空格分隔加密后的数字,输出结果
encrypted_message = ' '.join(encrypted)
print("加密后的消息:", encrypted_message)

关键部分说明:

  1. build_shifted_dict函数:核心逻辑是根据偏移量shift重构字母表。比如shift=3时,字母表会从[a,b,c,d,e,f,...]变成[d,e,f,a,b,c,g,...],再通过枚举生成你需要的键值对。
  2. 密钥解析:兼容两种输入方式——输入D3会提取数字3作为偏移量,输入D也会自动计算出偏移量3(因为d在字母表中是第3位,从0开始计数)。
  3. 加密逻辑修复:原代码会重复添加字符(每个字母触发两次写入),现在改成找到对应键后立即break,同时保留空格、标点等非字母内容,更实用。

测试时输入密钥D3,打印的字典就会和你期望的一致,加密功能也能正确把字母转换成对应数字(比如d转成1,a转成4)。


内容的提问来源于stack exchange,提问作者Ahmad Syahmi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 20:02:37