簡體   English   中英

誰能告訴我我做錯了什么,字典與 Python 中的列表?

[英]Can anyone tell me what I am doing wrong, dictionary vs list in Python?

我正在嘗試將字典初始化為我的 object 中的屬性並嘗試使用 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 function 在我直接訪問它時工作。 喜歡:

    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':[]}

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

我究竟做錯了什么? 當我簽署{}而不是[]時,返回值似乎存在問題。 有沒有辦法弄清楚或解決它?

您同時使用f""str.format ,因此您進行了兩次格式化。 str.format1 {'1':[]}解釋為模板字符串並嘗試擴展'1' ,因此是KeyError

感謝偉大的回應和建議。 是的,我相信你們中的許多人在我的代碼中看到了“奇怪”的東西,因為我沒有完全解釋這些目的。 是的,我不應該使用 defaultdict 而不是簡單的 dict。 是的,我正在使用 f'' also.format()。 謝謝你的課。

跨平台的工作可能很簡單,但需要您的反饋。 '''

class

    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(): for i in range(2): a = A(i) a.make_day() print(a) if name == ' main ': main()

0, {'sorted': [], ..., 'week': []} 1, {'sorted': [], ..., 'week': []}

'''

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM