我想更改字典中的密钥名称,我使用的代码如下:
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],
答案 0 :(得分:4)
在迭代时,您正在弹出并向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)
答案 1 :(得分:1)
您的代码存在以下几个问题:
for key in my_dict_other:
new_key = key + '/' + str(my_dict[key])
my_dict_other[new_key] = my_dict_other.pop(key)
my_dict_other
的键并为每个键执行my_dict[key]
。你确定my_dict
包含它们吗?如果没有,请执行my_dict.get(key, '')
或在其中添加if
支票。'31-0/[5400, 3601]'
,并且在某些时候它变为您的key
(如在for key in my_dict_other
密钥中),这当然在my_dict
中不存在,因此KeyError
。答案 2 :(得分:0)
[为了完整起见]除了schwobaseggl的答案之外,您还可以将新的键值写入带有新名称的新词典中:
fresh = {}
for key in my_dict_other:
fresh[(key + '/' + str(my_dict[key]))] = my_dict_other(key)
但是正如Ev.Kounis所提到的,你需要确保你的my_dict字典包含相同的密钥......你从.pop调用中得到KeyError的原因可能是由于密钥isn'在你的my_dict中。