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
相关产品推荐
相关产品推荐

