类型错误:循环字典时只能将 str(而不是 "tuple")连接到 str



简而言之,我在尝试遍历字典中的键值对时出现上述错误。我知道修复,但不知道原因。

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)显然你不能连接strtuple。但是,如果您这样做:

for k, v in webuser.items():
...

.items()回来的那个元组被解开包装,里面的物品进入kv,因为它们是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():
...

注意:如第一个所示,默认情况下,遍历字典会遍历其键。

要在字典中获取密钥,有两种方法:

  1. 遍历字典:for key in webuser
  2. 使用.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 足够聪明,可以将元组的每个元素与变量进行位置匹配。

相关内容

最新更新