【问题标题】:Dictionary:Get(): AttributeError: 'NoneType' object has no attribute 'append' [duplicate]Dictionary:Get():AttributeError:'NoneType'对象没有属性'append'[重复]
【发布时间】:2020-03-15 18:42:18
【问题描述】:

在这里我试图追加一个字典。如果键存在,否则创建一个新列表然后追加。 使用 get() 函数。

但它给出了“NONE Type objects”的错误。

class Solution:

    def solve(self, A, B):
        save_x={}
        save_y={}
        l=len(A)
        for i in range(l):
            save_x[A[i]]=save_x.get(A[i],[]).append(B[i])
            save_y[B[i]]=save_y.get(B[i],[]).append(A[i])

        print(save_x,save_y)

【问题讨论】:

  • 你能告诉你你运行了你的函数吗?
  • @kederrac 是这样的 s=Solution() s.solve([1,1,2,2],[1,2,1,2])

标签: python-3.x list dictionary


【解决方案1】:

list.append 不返回任何内容(返回 None),您可以通过以下方式解决您的问题:更改 for 循环:

for i in range(l):
    save_x[A[i]] = save_x.get(A[i], []) + [B[i]]
    save_y[B[i]] = save_y.get(B[i], []) + [A[i]]

这个版本有点慢,因为它在每次迭代时都会创建一个新列表

或者您可以使用dict.setdefault 并在已存在的情况下更新密钥(快一点):

for i in range(l):
    save_x.setdefault(A[i], []).append(B[i])
    save_y.setdefault(B[i], []).append(A[i])

最好的选择是使用collections.defaultdict:

from collections import defaultdict


save_x = defaultdict(list)
save_y = defaultdict(list)
for a, b in zip(A, B):
    save_x[a].append(b)
    save_y[b].append(a)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-26
    • 2019-03-10
    • 1970-01-01
    • 2022-08-12
    • 2017-05-02
    • 2019-11-16
    • 2019-03-15
    • 1970-01-01
    相关资源
    最近更新 更多