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

Python新手求助:如何高效将字典键替换为连续整数?

问题解答:将字典键替换为连续索引0,1,2,...

先看你代码的问题

你的代码运行报错主要有这几个原因:

  1. for i in p_length:p_length是整数,不能直接迭代,得用range(p_length)生成索引序列
  2. p_deck[i]={p_keys_list[i]:p_values_list[i]}:这里错误地把值包装成了嵌套字典,应该直接赋值p_deck[i] = p_values_list[i]
  3. Python3中dict.keys()和dict.values()返回的是视图对象,不是列表,直接用索引会报错,需要转成list
  4. 全局变量完全没必要,反而容易引发变量作用域问题

最简洁高效的实现方法

你只需要保留原字典值的顺序,把键替换为从0开始的连续整数,用字典推导式+enumerate是最直接高效的方式:

p_deck = {3:12, 5:23, 6:8, 9:47, 10:18}
p_deck = {i: val for i, val in enumerate(p_deck.values())}

enumerate(p_deck.values())会遍历原字典的值,同时生成从0开始的索引,字典推导式直接一步构建新字典。Python3.7+的字典默认保留插入顺序,完全能满足你的需求。

另一种等价实现

如果习惯用zip,也可以这么写:

p_deck = dict(zip(range(len(p_deck)), p_deck.values()))

range(len(p_deck))生成0到n-1的索引序列,和原字典的值一一对应后,用dict()直接转成新字典。

你的代码修正版(仅作错误演示,不推荐)

如果一定要基于你的思路改,修正后是这样:

p_deck = {3:12, 5:23, 6:8, 9:47, 10:18}

def order():
    p_values_list = list(p_deck.values())
    p_length = len(p_deck)
    new_deck = {}
    for i in range(p_length):
        new_deck[i] = p_values_list[i]
    return new_deck

p_deck = order()

核心修正:去掉全局变量、把视图对象转成列表、用range迭代索引、直接赋值值而非嵌套字典。

关于拆分重组的问题

你原来拆分键值再重组的方法确实过于繁琐,Python提供了很多内置工具可以直接完成这类操作,不需要手动拆分列表再循环赋值,既简洁又高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:01:08