如何正确更改密钥名称?

2024-04-24 21:09:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我想更改词典中的关键字名称,我使用的代码如下:

for key in my_dict_other:
    print(key)
    new_key = key + '/' + str(my_dict[key])
    print(new_key)
    my_dict_other[new_key] = my_dict_other.pop(key)

我遇到的问题是,在第一次成功编写代码之后,出现了一个关键错误

输出:

38-7
38-7/[2550, 1651]
13-9
13-9/[2550, 1651]
16-15
16-15/[5100, 3301]
31-0/[5400, 3601]
Traceback (most recent call last):
    new_key = key + '/' + str(my_dict[key])
KeyError: '31-0/[5400, 3601]'

每次都在一个不同的键上得到错误,所以似乎无法理解问题的模式或者我的代码有什么问题

编辑:结构my_dict_other

'41-3': [['2436', '2459', '1901', '2152'],
                      ['2704', '2253', '2442', '2062'],
                      ['2763', '2595', '2498', '2518'],
                      ['2190', '1918', '1970', '1875'],
                      ['3154', '2442', '3023', '2417'],
                      ['3360', '2481', '3252', '2458'],
                      ['653', '1916', '430', '1874'],

my_dict的结构:

'1-0': [5400, 3601],
 '1-1': [2550, 1651],
 '1-3': [5400, 3601],
 '1-4': [5400, 3601],
 '1-5': [5400, 3601],

Tags: key代码in名称newformy错误
3条回答

[为了完整性]除了schwobasegll的答案之外,您还可以将新的键值写入一个新的字典,其中包含新的名称:

fresh = {}
for key in my_dict_other: 
    fresh[(key + '/' + str(my_dict[key]))] = my_dict_other(key)

但作为伊夫·库尼斯前面提到过,您需要确保my\u dict字典包含相同的键…您从.pop调用中得到该键错误的原因可能是因为该键不在my\u dict中

您在迭代dict时弹出dict并将其添加到dict中。别那么做。例如,您可以在提取的密钥列表上循环:

for key in list(my_dict_other):  # loop over key list, not dict itself
    new_key = key + '/' + str(my_dict[key])  # assuming key in my_dict!
    my_dict_other[new_key] = my_dict_other.pop(key)

您的代码有几个问题:

for key in my_dict_other:
    new_key = key + '/' + str(my_dict[key])
    my_dict_other[new_key] = my_dict_other.pop(key)
  1. 您正在更改正在循环的对象。。那是一个不不。添加元素也会让循环变得无穷无尽!你知道吗
  2. 您正在循环遍历my_dict_other的键,并为每个键执行my_dict[key]。你确定my_dict包含所有这些吗?如果没有,那么在那里做my_dict.get(key, '')或者添加一个if检查。你知道吗
  3. 但是,它们中最大的失败,最终导致代码中断的是1.2.的组合。您在第一次迭代中添加了键'31-0/[5400, 3601]',在某个时刻它变成了您的key(如for key in my_dict_other键),当然它在my_dict中不存在,因此KeyError。你知道吗

相关问题 更多 >