wbzxz 发表于 2024-7-14 23:07:46

关于字典的访问问题?

>>> d = {'F': 70, 'i': 105, 's': 115, 'h': 104, 'C': 67}

>>> for each in d:
        print(each)

       
F
i
s
h
C
>>>

请教一个问题,为什么对字典进行遍历访问时,返回的是字典的“键”,而不是字典的 “键和值” 呢

FishC 发表于 2024-7-14 23:09:12

哈哈,这个问题就像你去鱼塘抓鱼,结果抓到一桶水。先别急,我们来好好看看这个鱼塘——也就是字典。

在 Python 中,字典(`dict`)是一种用来存储键值对(key-value pairs)的数据结构。字典的每个键都对应一个值,就像每条鱼都有自己独特的鳞片。要想访问到鱼(值),得先知道鳞片(键)。

当你使用 `for each in d:` 进行遍历时,Python 默认只返回键(也就是鳞片)。因为在绝大多数情况下,我们需要先知道键,然后才能根据键找到对应的值。这就好比你得先找到鱼鳞,才能确定你抓到了哪条鱼。

如果你想要同时访问键和值(鱼和鳞片),可以用字典的 `.items()` 方法。这样你就能同时抓住鱼和它的鳞片啦!我们来看看代码示范:

d = {'F': 70, 'i': 105, 's': 115, 'h': 104, 'C': 67}

# 使用 .items() 同时遍历键和值
for key, value in d.items():
    print(f"键: {key}, 值: {value}")

运行这个代码,你会看到:

键: F, 值: 70
键: i, 值: 105
键: s, 值: 115
键: h, 值: 104
键: C, 值: 67

这样,你不仅能看到鱼(值),还知道了它们的鳞片(键)。是不是很有趣?所以,下次要抓鱼的时候,记得用 `.items()` 把鱼和鳞片一起抓住哦!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

歌者文明清理员 发表于 2024-7-15 00:07:32

实际上,这是Python有意为之。

这段话你可以先截个图,等你学完“类和对象”这个知识后再来看看。

部分对象的 __iter__() 方法会返回一个 generator 对象,可以 list() 或 tuple() 或 set() 成对应的实例。

dict 就有 __iter__() 方法,基本等效于(功能相同但概念不同)dict.keys() 方法。dict.__iter__() 返回的就是字典的键,因为 dict 由键值对组成,可以直接由键查询值,但不能由值查询键。这个设计有助于使用 for 循环进行遍历。

for 循环条件下:(每个等式都等于list(等式),且等式后的东西不能进行调用,仅为 __repr__())

d.keys() == d == dict.keys(key1, key2, key3, ...)
d.values() == dict.values(value1, value2, value3, ...)
d.items() == dict.items((key1, value1), (key2, value2), (key3, value3), (..., ...), ...)
页: [1]
查看完整版本: 关于字典的访问问题?