有人能告诉我我做错了什么吗,Python中的字典与列表



我正在尝试将字典初始化为对象中的属性,并尝试使用defaultdict。不知怎么的,它适用于Mac而非Windows。我想要的是:

1 {'1':[], '2':[]}
2 {'1':[], '2':[]}

以下是我迄今为止所做的工作。

class A:

def __init__(self, id):
self.id = id
self.x = self.y
@property
def y(self):
ref = defaultdict(list)
ls = ['1', '2']
for i in ls:
ref[i] = []
return ref
def __str__(self):
return f'{self.id}, {self.x}'.format(self=self)
def main():
for i in range(2):
me = A(i)
print(me)
if __name__ == '__main__':
main()

我收到的错误消息是:

KeyError: "'23'" 

或一些其他数字,并且每次都会变化。self.y函数在我直接访问它时起作用。例如:

for i in range(2):
me = A(i)
print(me.y)

当然,在此之前我设置:

class A: 

def __init__(self, id):
self.id = id    
self.x =  [] 

然后

for i in range(2):     
me = A(i)
print(me)

我得到

1 []
2 []

但是我想要

1 {'1':[]}
2 {'2':[]}

所以我可以在字典值中添加一些值。

我做错了什么?返回值似乎有问题当我签署CCD_ 2而不是CCD_。有没有办法解决这个问题?

您同时使用f""str.format,因此您要进行两次格式化。str.format1 {'1':[]}解释为模板字符串,并尝试扩展'1',从而生成KeyError

编辑:移除其中任何一个都可以解决问题。至于它为什么表现不同:'1'不是一个有效的标识符。因此,模板字符串格式不正确,并且没有指定行为(至少在文档中没有指定(。

感谢您的回复和推荐。是的,我相信你们中的许多人在我的代码中看到了"奇怪"的东西,因为我没有完全解释其目的。是的,我不应该用defaultdict代替简单的dict。是的,当时我也用了f''.format((。谢谢你的课。

跨平台的工作原理可能很简单,但需要您的反馈。''

A类:

def __init__(self, x):
self.x = x   # id
self.y = {}  # key = days, value = activities 

def make_day(self):
''' each inst accepts random days and days have random activities'''
random_days =  ['sorted','string','days','sampled','from','week']
for each_day in random_days:
self.y[each_day] = []
return self.y

def __str__(self):
return f'%d, %s'%(self.x, self.y)

def-main((:对于范围(2(中的i:a=a(i(a.make_day((打印(a(如果name='main':main((

0,{已排序:[],…,"周":[]}1,{已排序:[],…,"周":[]}

''

最新更新