无论Python中的当前值如何,都在for循环中更改键值

时间:2015-05-26 05:12:13

标签: python dictionary

我在字典上运行for循环,如果它以" C - "开头,我需要更改密钥。无论C -

之后的内容如何,​​都要到特定的字符串

示例数据:

 {'H-NSW-BAC-ENG': 15, 'C-NSW-BAC-ENG': 15, 'H-NSW-BAC-FBE': 30, 'C-NSW-BAC-FBE': 30, 'G-NSW-BAC-ENG': 15, 'G-NSW-BAC-FBE': 30}

方法I使用这样做:

def transform_caps_keys(d):
    for k, v in d.items():
        if k[0:1] == 'C':
            k = "C-STD-B&M-SUM"
            print(k)
    print(d)

我需要' C-NSW-BAC-ENG'和' C-NSW-BAC-FBE'改为' C-STD-B& M-SUM'。

当我打印k时,我得到了我想要的键,但它们没有在字典中更改。

我也尝试过:

def transform_caps_keys(d):
for k, v in d.items():
    if k[0:1] == 'C':
        d['C-STD-B&M-SUM'] = d.pop(k)
        print(k)
print(d)

但是我收到以下错误:

RuntimeError: dictionary changed size during iteration

3 个答案:

答案 0 :(得分:1)

迭代它(密钥集合)时不能改变迭代集合,而且 - 对字典中的键的任何“编辑”意味着该字典中的新键,长话短说明你需要一个新的字典基于你的改变规则。

答案 1 :(得分:0)

首先,我认为k [0:1] ='C'是多余的,可以在k [0]中完成,我猜其次 要么你用这个

dict[new_key] = dict[old_key]
del dict[old_key]

或者,

dict[new_key] = dict.pop(old_key)

如果未定义dict [old_key],将引发KeyError。请注意,这将删除dict [old_key]。

>>> dict = { 1: 1, 2: 2, 3: 3 }
>>> dict['ONE'] = dict.pop(1)
>>> dict
{2: 2, 3: 3, 'ONE': 1}
>>> dict['ONE'] = dict.pop(1)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
KeyError: 1

答案 2 :(得分:0)

    def transform_caps_keys(d):
        for k, v in d.items():
            if k[0:1] == 'C':
                val = "C-STD-B&M-SUM"
                d[val] = d[k]
                del d[k]
        print(d)