我正在尝试将字典初始化为对象中的属性,并尝试使用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.format
将1 {'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,{已排序:[],…,"周":[]}
''