You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python遍历字典:两种print写法的适用场景与可互换性分析

两种字典遍历写法的差异与适用场景

这两种写法看起来输出接近,但本质和适用场景完全不同,绝对不能随便互换,咱们一步步拆解清楚:

首先得明确核心本质:desc.items()返回的是一个迭代器,每个元素都是包含「键」和「值」的二元元组,比如('city', 'Monowi')。

两种写法的本质区别

  • for i, j in desc.items():这是元组解包操作,把每个二元元组拆成两个独立变量——i对应键,j对应值。
  • for i in desc.items():直接把整个二元元组赋值给变量i,所以i本身就是一个完整的键值对元组。

输出其实并不一致

运行你给出的代码,实际打印结果是有明显区别的:

desc = {'city': 'Monowi', 'state': 'Nebraska', 'county':'Boyd', 'pop': 1}

# 第一种写法的输出(无括号,是两个独立元素)
for i, j in desc.items(): print(i, j)
# city Monowi
# state Nebraska
# county Boyd
# pop 1

# 第二种写法的输出(带括号,是元组的字符串表示)
for i in desc.items(): print(i)
# ('city', 'Monowi')
# ('state', 'Nebraska')
# ('county', 'Boyd')
# ('pop', 1)

你可能之前没注意到这个细节,两种输出的格式是不一样的。

适用场景差异

1. 优先用解包写法的场景

当你需要单独操作键或值时,解包写法更直观、可读性更强,还能避免索引错误:

# 示例1:只处理值,用_表示不需要的键
for _, value in desc.items():
    if isinstance(value, str):
        print(value.upper())

# 示例2:对键和值分别做逻辑判断
for location, population in desc.items():
    if population <= 5:
        print(f"{location}是个极小的地方")

如果换成遍历元组的写法,你得用i[0]取键、i[1]取值,不仅代码繁琐,还容易写错索引(比如把i[1]写成i[0])。

2. 适合直接遍历元组的场景

当你需要把键值对作为一个整体处理时,直接遍历元组更简洁:

# 示例1:把所有键值对存入新列表
key_value_list = []
for pair in desc.items():
    key_value_list.append(pair)
# 结果:[('city', 'Monowi'), ('state', 'Nebraska'), ...]

# 示例2:把键值对直接传递给需要二元组的函数
def format_pair(pair):
    key, val = pair
    return f"【{key}】:{val}"

formatted_results = [format_pair(p) for p in desc.items()]

这种场景下,解包反而多此一举,直接传递整个元组更符合逻辑。

额外提示:你代码里的错误写法

最后提一下你代码里的后两行:

for i, j in desc.items(): print(i, j)[1]
for i in desc.items(): print(i)[1]

这两行是错误的——因为print()函数的返回值是None,对None取索引会抛出TypeError: 'NoneType' object is not subscriptable,需要避免这种写法。

内容的提问来源于stack exchange,提问作者ZrSiO4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:20:29