鱼C论坛

 找回密码
 立即注册
查看: 1248|回复: 7

[已解决]047课堂内容求助

[复制链接]
发表于 2022-5-26 15:13:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
class CountList:
   
    def __init__(self,*args):
        self.value = [x for x in args]
        
        self.count = {}
        self.count.fromkeys(range(len(self.value)),0)


    def __len__(self):
        return len(self.value)

    def __getitem__(self,key):
        self.count[key] += 1
        return self.value[key]

为什么我定义字典的方式在运行中会报错呢?
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    c1[3]
  File "D:/Python39/047自定义列表.py", line 13, in __getitem__
    self.count[key] += 1
KeyError: 3

改写成书上那样就不报错
self.count={}.fromkeys(range(len(self.value)),0)
最佳答案
2022-5-26 15:17:17
因为你的字典是个空字典,取不出数据
class CountList:
   
    def __init__(self,*args):
        self.value = [x for x in args]
        
        self.count = {}
        self.count = self.count.fromkeys(range(len(self.value)),0)            # 这里要赋值

    def __len__(self):
        return len(self.value)

    def __getitem__(self,key):
        self.count[key] += 1
        return self.value[key]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-26 15:17:17 | 显示全部楼层    本楼为最佳答案   
因为你的字典是个空字典,取不出数据
class CountList:
   
    def __init__(self,*args):
        self.value = [x for x in args]
        
        self.count = {}
        self.count = self.count.fromkeys(range(len(self.value)),0)            # 这里要赋值

    def __len__(self):
        return len(self.value)

    def __getitem__(self,key):
        self.count[key] += 1
        return self.value[key]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-26 15:26:06 | 显示全部楼层
[img][/img]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-26 15:26:48 | 显示全部楼层
isdkz 发表于 2022-5-26 15:17
因为你的字典是个空字典,取不出数据

我查看了书上,我那样写也是赋值语句啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-26 15:29:20 | 显示全部楼层
isdkz 发表于 2022-5-26 15:17
因为你的字典是个空字典,取不出数据

>>> dict1 = {}
>>> dict1.fromkeys((1,2,3),0)
{1: 0, 2: 0, 3: 0}
>>> dcit1
Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>
    dcit1
NameError: name 'dcit1' is not defined
>>> dict1
{}
明白了,谢谢前辈,自己试了下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-26 15:29:58 | 显示全部楼层
南巷君君 发表于 2022-5-26 15:26
我查看了书上,我那样写也是赋值语句啊

你赋值的是一个空字典,fromkeys 只会产生一个新的字典,并不会改变原来的字典,

所以你的字典还是一个空字典

>>> count = {}
>>> count.fromkeys(range(5),0)
{0: 0, 1: 0, 2: 0, 3: 0, 4: 0}
>>> count                 # count 还是空字典
{}
>>>

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-26 15:30:05 | 显示全部楼层
给你看看一个网址:https://www.runoob.com/python/att-dictionary-fromkeys.html
看下面的笔记,说的是fromkey是负责创建字典的,你这样的写法会造成上面self.count是一个空列表,然后执行到__getitem__函数的时候就会出现错误,书上这么写则是可以创建一个经过初始化的字典赋值给self.count,可以满足字典的操作我对python还不是很熟悉,但是从查到的资料显示是python有这样的实现机制方面的问题,可以看看前面给你的网址下方笔记的例子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-5-26 15:43:16 | 显示全部楼层
谢谢,还是实践的太少了,有不少坑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 03:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表