Python 具有赋值的词典引发赋值前引用的错误

Python 具有赋值的词典引发赋值前引用的错误,python,dictionary,Python,Dictionary,我需要编写一个代码,将字典中的项目放入一个列表中,并在键或值之后对它们进行排序。这是我想出的代码: import copy dict_ip_attempts = {"180.237.210.112": 9, "180.237.210.54": 5, "180.237.210.13": 2, "180.237.210.30": 5} d=copy.deepcopy(dict_ip_attempts) ip_adress=[] for key in dic

我需要编写一个代码,将字典中的项目放入一个列表中,并在键或值之后对它们进行排序。这是我想出的代码:

import copy
dict_ip_attempts = {"180.237.210.112": 9, "180.237.210.54": 5,
                     "180.237.210.13": 2, "180.237.210.30": 5}

d=copy.deepcopy(dict_ip_attempts)
ip_adress=[]
for key in dict_ip_attempts:
    var=key.split(".")
    ip_adress.append(int("".join(var)))

ip_adress.sort()

def sortip_adress():
    output=[0]*(len(ip_adress))
    for key in dict_ip_attempts:
        var=key.split(".")
        for i in range(len(ip_adress)):
            if int("".join(var)) == ip_adress[i]:
                output[i]=((key, dict_ip_attempts[key]))
    return output

def sortattempts():
    output=[]
    for key in dict_ip_attempts:
        if dict_ip_attempts[key]==min(dict_ip_attempts.values()):
            output.append((key, dict_ip_attempts[key]))
            dict_ip_attempts.pop(key)
    dict_ip_attempts=copy.deepcoy(d)
    return output

print("The dictionary sorted after the ip_adresses is:", sortip_adress())
print("The dictionary sorted after the attempts is:", sortattempts())
函数sortip_address()工作正常,但函数sortatetests()工作不正常。当python到达第30行时,它会打印:UnboundLocalError:赋值前引用的局部变量“dict_ip_truments”

第30行是这一行:

for key in dict_ip_attempts:

我不明白为什么会出现这个错误,因为我在第2行定义了dict_ip_尝试。有人能给我解释一下吗?

排序尝试
函数的开头添加
全局dict\u ip\u尝试

编辑:
基本上,您尝试执行的操作是以一种更为简洁的方式描述的。

将全局
dict\u ip\u尝试作为一行添加到两个函数声明下,因为它是一个全局变量。在for key in dictionary循环中从字典中弹出一个值也是一个坏主意(正如Wondercricket提到的)。这应该不是必需的,但是如果您需要清空字典,只需在循环完成后使用
dict_ip_尝试={}

global dict_ip_尝试添加为两个函数声明下的一行即可,因为它也是一个全局变量,所以不要执行
dict_ip_尝试.pop(key)
在迭代
dict\u ip\u尝试时
。这将导致错误和意外结果。请发布完整的回溯。RuntimeError:字典在运行期间更改了大小iteration@Christian请看我对你答案的评论