【问题标题】:.pop() Dictionary Error.pop() 字典错误
【发布时间】:2014-10-25 12:03:57
【问题描述】:

我已经尝试了很长时间来寻找这个问题的答案。 我到处都试过了,但可能是我用错误的关键字搜索,如果是这样,请原谅我问了一个愚蠢的或已经回答的问题。

我正在尝试在 python 2.2 中弹出字典。 以下是我尝试运行的代码的 sn-p:

ABRA= {}
ABRA[0] = ['MENU', ['TV', 'MENU']]
ABRA[1] = ['TV', 'PC', ['RM', 'LM']]
count = 0
KADABRA = ABRA.pop(count).pop()
print(str(KADABRA))
print(len(KADABRA))
count += 1
KADABRA = ABRA.pop(count)
print(str(KADABRA))

当我在像 Codepad 这样的在线解释器中输入此代码时,它可以工作并且我得到所需的输出,当我在我希望它运行的服务器上运行它时,它没有。 我收到以下错误:

AttributeError('dict' 对象没有属性'pop')。

我没有看到代码中有错误,也没有看到我调用 pop 的方式。 我什至试图删除“双重”流行音乐。 还是一个错误。 如果我只是把它变成一个列表而不是像这样的字典:

ABRA = ['MENU', ['TV', 'MENU']]
KADABRA = ABRA.pop()
print(str(KADABRA))
print(len(KADABRA))

然后它起作用了,我得到了正确的打印。 但我不想要一个列表,而是一个字典。 我见过用字典弹出的例子。 所以我的问题是为什么我不能在我的服务器上弹出 dict 和/或有没有用 dicts 弹出的替代方法?

【问题讨论】:

    标签: python dictionary stack python-2.2


    【解决方案1】:

    来自dict.pop() documentation

    2.3 版中的新功能。

    换句话说,Python 2.2 中没有这样的方法。

    您可以自己实现:

    _sentinel = object()
    
    def pop_dict(d, k, default=_sentinel):
        try:
            v = d[k]
            del d[k]
            return v
        except KeyError:
            if default is _sentinel:
                raise
            return default
    

    将其用作:

    pod_dict(ABRA, count)
    

    【讨论】:

    • 感谢您的回复,但作为后续问题:我的服务器也拒绝使用 try except,是否有一个优雅的解决方案来检查密钥是否不在字典中?跨度>
    • @MartijnClaes:然后请求许可而不是宽恕:if k in d:
    • @MartijnClaes:这是什么奇怪的服务器拒绝使用try...except
    • 我知道.. 我也从来没有遇到过这样的事情。我是一名在这家公司实习的学生,他们使用的服务器已经过时并且被关闭了。这是另一个执行 .py 脚本的程序,该程序似乎阻止了一切。
    • @MartijnClaes:这台服务器可能是 Zope 吗?
    猜你喜欢
    • 2022-06-14
    • 2011-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    相关资源
    最近更新 更多