简而言之,我在尝试遍历字典中的键值对时出现上述错误。我知道修复,但不知道原因。
webuser = {
"username": "JWick",
"first": "John",
"last": "Wick",
}
for key in webuser.items():
print("nKey: " + key)
正确:
for key, value in webuser.items():
print("nKey: " + key)
print("value: " + value)
这是因为我试图遍历两个值并且只使用一个变量来存储和输出吗?这样,程序尝试在变量中连接字典中的数据并失败。
在任何迭代中,.items()
都会给你一个(key, value)
对的元组。如果您这样做:
for k in webuser.items():
...
k
变成了一个元组,(key, value)
显然你不能连接str
和tuple
。但是,如果您这样做:
for k, v in webuser.items():
...
从.items()
回来的那个元组被解开包装,里面的物品进入k
和v
,因为它们是str
所以你可以做串联。
不要忘记打印 for 循环变量以查看发生了什么。
dict.items()
包含(key,value)
元组作为不能直接与字符串连接的元素。查看下面的演示,了解循环的一次迭代:
webuser = {
"username": "JWick",
"first": "John",
"last": "Wick",
}
for item in webuser.items():
print(item)
key, value = item
print("nKey: " + key)
print("value: " + value)
break
输出:
('username', 'JWick')
Key: username
value: JWick
这表明这些项目以元组的形式进入。 然后使用多个赋值key, value = item
来解压缩键和值。相反,您可以直接执行以下操作:
for key, value in webuser.items():
...
在原始示例中,您只想迭代键。您可以通过以下两种方式执行此操作:
for key in webuser:
...
或
for key in webuser.keys():
...
注意:如第一个所示,默认情况下,遍历字典会遍历其键。
要在字典中获取密钥,有两种方法:
- 遍历字典:
for key in webuser
- 使用
.keys()
:for key in webuser.keys()
为了获取字典的值:.values()
用于for key in webuser.values()
为了获取字典的键和值:使用items()
。for key in webuser.items()
.它返回一个元组。
当您不使用 2 个变量时,元组不会解压缩,而是分配给变量key
。
但是for key,values in webuser.items()
,元组被解压缩,键被分配给key
值被分配给values
字典items()
方法每次迭代返回一个包含 2 个元素的元组。
简而言之,元组是一种数据结构,它是一种不可变的异构项目列表(在元组中,每个元素代表一个不同的概念,而在列表中,它们都应该具有相同的性质。这是一个很好的做法,而不是技术限制)。您可以按索引访问元组的项目,其表示法与列表相同。
因此,您可以通过以下方式获得相同的结果:
for item in webuser.items():
print("key: " + item[0])
print("value: " + item[1])
或
for item in webuser.items():
print(f"key: {item[0]}; value: {item[1]}")
当你在 for 赋值中使用 2 个变量时,Python 足够聪明,可以将元组的每个元素与变量进行位置匹配。