Python-字典-修改__getitem__?

2023-11-25

好的,我已经构建了自己的变量处理程序,其中有一个__getitem__通过 data[key] 访问数据时使用的函数,它工作得很好,除了尝试访问项目链接时:

data["key"]["subkey"]


def __getitem__(self, key, **args):
    print key
    ...
    return self.dict[key]

当尝试访问不存在的子项时,Python 只是返回一个 KeyError 而不打印“子项”,为什么会这样以及如何让 Python 打印出我实际想要获取的内容?

我知道我可能误解了机制,但是有没有办法模拟字典并遵循所请求的数据字符串? 主要是这样我可以动态记录字典流中丢失的变量......

这显然是有效的(但这不是我喜欢的本机语法):

data["key:subkey"]

def __getitem__(self, key, **args):
    for slice in key.split(':'):
        print key
    ...

目标是模仿以下内容,

Works:

data = {'key' : {'subkey' : 1}}
print data["key"]["subkey"]

不起作用,但我想捕获其中的异常__getitem__然后自动创建丢失的密钥或仅记录丢失的子密钥:

data = {'key' : {}}
print data["key"]["subkey"]

解决方案:

class Var():
    def __init__(self):
        self.dict = {'test' : {}}
    def __getitem__(self, var, **args):
        print ':',var
        if var in self.dict:
            v = Var(self.dict[var])
            return v

print vHandle['test']['down']

Output:

: test

: down

None


事实是,当Python遇到诸如这样的表达式时data["key"]["subkey"],内部所做的是(data["key"])["subkey"]。也就是说,表达式的第一部分被解析:从对象“data”中检索项目“key”。然后,Python 尝试调用__getitem__在该表达式的结果对象上。 如果这样的结果对象没有__getitem__方法本身,有你的错误。

有两种可能的解决方法:您应该使用“元组索引” - 就像data["key", "subkey"](然后测试你的__getitem__方法(无论您是否有一个元组实例作为键) - 或 make__getitem__返回一个专门的对象,该对象还具有__getitem__方法 - 即使它所做的只是记录请求的密钥。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python-字典-修改__getitem__? 的相关文章

  • Python 函数句柄 ala Matlab

    在 MATLAB 中可以创建function handles http www mathworks co uk help techdoc ref function handle html与类似的东西 myfun arglist body 这
  • 未找到角度映射文件

    我刚刚下载了 angular min js 的新副本 并且在 angular min js map 上收到了 404 但我没有将其包含在我的代码中 Chrome 中的错误 GET http angular dev js angular mi
  • matplotlib:调整图形窗口大小而不缩放图形内容

    当您调整图形大小时 Matplotlib 会自动缩放图形窗口中的所有内容 通常这是用户想要的 但我经常想增加窗口的大小 为其他东西腾出更多空间 在这种情况下 我希望在更改窗口大小时预先存在的内容保持相同的大小 有谁知道一个干净的方法来做到这
  • 在Python中不断寻找用户输入

    我将如何编写一个始终寻找用户输入的 Python 程序 我想我希望有一个等于输入的变量 然后根据该变量的等于值会发生不同的情况 因此 如果变量是 w 那么它将执行某个命令并继续执行 直到收到另一个输入 例如 d 然后会发生不同的情况 但直到
  • 从 Django 基于类的视图的 form_valid 方法调用特殊(非 HTTP)URL

    如果你这样做的话 有一个 HTML 技巧 a href New SMS Message a 点击新短信打开手机的本机短信应用程序并预 先填写To包含所提供号码的字段 在本例中为 1 408 555 1212 以及body与提供的消息 Hel
  • 从 Python 将分层 JSON 数据写入 Excel xls?

    我想将一些数据从 python 写入 xlsx 我目前将其存储为 JSON 但它从 Python 中输出什么并不重要 单个文章的 JSON 如下所示 Word Count 50 Key Words Blah blah blah Foo Fr
  • 如何计算查询集中每个项目的两个字段的总和

    假设我有以下模型结构 class SomeModel Model base price DecimalField commision DecimalField 我不想存储total price在我的数据库中为了数据一致性并希望将其计算为ba
  • 如何在seaborn中绘制离散变量的分布图

    当我画画的时候displot对于离散变量 分布可能不像我想象的那样 例如 We can find that there are crevices in the barplot so that the curve in kdeplot is
  • 将相同的 Patch 实例添加到 matplotlib 中的多个子图中

    我正在尝试将补丁的相同实例添加到 matplotlib 中的多个轴 这是最小的例子 import matplotlib pyplot as mpl plt import matplotlib patches as mpl patches f
  • 在Python中清理属于不同语言的文本

    我有一个文本集合 其中的句子要么完全是英语 印地语或马拉地语 每个句子附加的 id 为 0 1 2 分别代表文本的语言 无论任何语言的文本都可能有 HTML 标签 标点符号等 我可以使用下面的代码清理英语句子 import HTMLPars
  • Python ElementTree 获取带有命名空间的属性

    我试图访问 XML 中的 def 所以在这个例子中我会得到Evolus Common PlainTextV2作为输出 我似乎无法弄清楚如何获取具有名称空间的属性 如果我想得到id它工作得很好 Python for content ns in
  • 多个列表和大小的所有可能排列

    在 python 中使用以下命令很容易计算简单的排列itertools permutations https docs python org 3 library itertools html itertools permutations 你
  • Scapy:如何将新层(802.1q)插入现有数据包?

    我有一个数据包转储 想要将 VLAN 标记 802 1q 标头 注入到数据包中 怎么做 为了找到答案 我查看了Scapy 插入新层和记录问题 https stackoverflow com q 17259592 1381638 这确实很有帮
  • Python 中使用 globals() 的原因?

    Python 中有 globals 函数的原因是什么 它只返回全局变量的字典 这些变量已经是全局的 所以它们可以在任何地方使用 我只是出于好奇而问 试图学习Python def F global x x 1 def G print glob
  • 使用 os.forkpty() 创建一个伪终端以 ssh 到远程服务器并与其通信

    我正在尝试编写一个 python 脚本 它可以 ssh 到远程服务器 并可以从 python 客户端执行 ls cd 等简单命令 但是 在成功 ssh 到服务器后 我无法读取伪终端的输出 任何人都可以在这里帮助我 以便我可以在服务器上执行一
  • 如何删除 pip 安装的所有软件包?

    如何从当前激活的虚拟环境中卸载 pip 安装的所有软件包 我发现这个片段作为替代解决方案 与重新创建 virtualenv 相比 删除库更加优雅 pip freeze xargs pip uninstall y 如果您通过 VCS 安装了软
  • 如何使用 Python 实现并行 gzip 压缩?

    使用python压缩大文件 https stackoverflow com questions 9518705 big file compression with python给出了一个很好的例子来说明如何使用例如bz2 纯粹用 Pytho
  • 如何通过 Selenium 内部的文本查找按钮(Python)?

    我有以下三个按钮 我不知道如何获取其中的文本 例如异常值 我试过browser find element by link text Outliers click 但出现 无法找到元素 错误 我该怎么做 See find element by
  • Pandas 2 个字段中唯一值的数量

    我正在尝试查找覆盖 2 个字段的唯一值的数量 例如 一个典型的例子是姓氏和名字 我有一个数据框 当我执行以下操作时 我只获取每列的唯一字段数 在本例中为 最后一个 和 第一个 不是复合体 df Last Name First Name nu
  • 使用 python/scipy 进行 voronoi 和 lloyd 松弛

    如何使用 Qhull 确定哪些 voronoi 单元 按索引 是 正确的 由 现有顶点 组成 我正在尝试使用 LLoyds 算法和 scipy spatial Voronoi 它是 Qhull 的包装器 生成的输入来执行约束松弛 就代码而言

随机推荐

  • 使用 ios 7 视差效果移动图像

    我刚刚看到 Facebook 的新纸质应用程序 它可以根据视差效果使图像移动 因此 它将图像缩放到全屏 当您倾斜屏幕时 它会将图像滚动到您倾斜的一侧 我已经能够像苹果那样添加视差效果 但不能像 Facebook 那样添加视差效果 有谁知道他
  • 处理 Enum 类型时 CStr() 与 .ToString 的比较

    我 显然是错误的 假设Cstr something 相当于something ToString 我想将枚举类型作为字符串来获取 这似乎取决于我使用的转换方法 我要么获取该类型的索引enum或名称 Public Enum vehicleTyp
  • 如何在 findAll() 中获取数组结果 - Doctrine?

    我需要使用以下方法获取数据库中的所有记录作为数组findAll 在教义中 我的查询是这样的 result this gt getDoctrine gt getRepository CoreBundle Categories gt findA
  • 任务执行失败:':app:preDexDebug'

    我遇到了那个著名的 app preDexDebug 错误 首先 清理项目或重建项目可以正常工作 不会出现错误 在默认设置下 我将项目字节码版本设置为 1 7 并且在项目结构中的 SDK 位置下 JDK 位置似乎也是正确的 经过一段时间的研究
  • 由于信号导致命令失败:归档时分段错误:11

    我尝试存档我的应 用程序并收到此错误 由于信号导致命令失败 分段错误 11 当我构建它时 一切都很顺利 在真实设备上也是如此 归档时会发生这种情况 有什么想法如何解决吗 这是错误的一部分 0 swift 0x000000010f79f3ad
  • 如何在 Angular 中嵌套 routerLink

    我有一个 Angular 7 项目 我有路由器链接 a 标签 并且我已经嵌套了 a 两者都有的标签routerLink财产 我面临的问题是 内在 a 路线不起作用 a Comp1 a Navigate to comp2 Nested a a
  • Swift/iOS:如何在具有 AnyObject/Any 或指针的函数中使用 inout 参数

    我正在尝试编写一个函数 该函数接受变量指针和描述符 键并为变量设置新值 理想情况下 指针应该是对象或基元 但我也可以使用单独的函数 或附加参数 在我的代码中 我也使用该键从数据库中检索新值 但在下面的示例中 我使用虚拟值对其进行了简化 以便
  • 使用弱引用有什么好处?

    我的应用程序中存在一些内存泄漏 它们都源于一个特定的视图集群 我花了很多时间对其进行调整并尝试尽可能减少上下文传递 这让我相信集群中使用的位图是问题所在 所以我想对视图使用的位图的所有引用使用 Wea kReferences 我从未使用过
  • Android Studio:生成主 dex 列表时出错

    我试图从我的项目中完全删除 firebase 依赖项 但我已经设法完全搞砸了我的 gradle 我需要帮助才能使其再次工作 我需要有谷歌播放服务依赖项 因为我正在使用谷歌地图和地理围栏 这是我每次尝试重建项目时遇到的错误 java lang
  • 在 XSLT 中实现键值概念

    我正在研究 XSLT 我需要实现如下内容 我的源 XML 示例如下所示
  • Android:获取WebView的滚动位置

    我是安卓新手 我只想知道用户在页面上滚动到的位置 当网页上的某个点出现在屏幕底部时 我想触发一个事件 但这段代码会引发异常 我知道WebView继承了getScrollY 从视图 我没有正确实施吗 提前致谢 public class Scr
  • 引导多个组件的含义是什么

    我可以执行以下操作 NgModule imports BrowserModule declarations AppComponent BComponent bootstrap AppComponent BComponent lt here
  • 用C语言获取当前时间(以毫秒为单位)?

    Java 的等价物是什么System currentTimeMillis in C include
  • Rust:split_at_mut(即 join_mut)有相反的吗?

    有一个非常好的 split at mut 函数 它可以将 1 个切片变成 2 个 有没有办法撤消该操作 以便我可以再次返回到原 始数组 假设我知道它们在内存中是连续的 因为我只是将它们分开 问题是 是否有类似于 join mut 的东西 如
  • DependencyResolver.SetResolver 不工作

    我正在尝试使用以下命令在新应用程序上设置容器Dependency SetResolver方法并使用 autofac 与 autofac mvc 5 集成 问题是设置解析器似乎没有做任何事情 将始终使用默认解析器 并且始终需要默认构造函数 有
  • 如何将数组参数传递给 Bash 脚本

    令我惊讶的是 经过 1 小时的搜索后我没有找到答案 我想将一个数组传递给我的脚本 如下所示 test sh argument1 array argument2 我不想将其放入另一个 bash 脚本中 如下所示 array a b c for
  • 如何使用 python-magic 5.19-1

    我需要从 python3 中没有后缀的文件中确定 MIME 类型 我认为 python magic 作为一个合适的解决方案 不幸的是它不能像这里描述的那样工作 https github com ahupp python magic blob
  • 如何在 Angular 4+ 的 NgForm 中从 NgModel FormControl 获取 ElementRef 引用

    在 Angular 4 中 我遵循模板驱动的形式
  • 407 需要身份验证 - 未发送质询

    Update 如果您刚刚提出这个问题 一般要点是我正在尝试通过代理创建 HttpWebRequest 并且我从我们奇怪的代理服务器收到 407 IE Firefox Chrome 都能够成功协商代理 Adobe Air 应用程序也是如此 重
  • Python-字典-修改__getitem__?

    好的 我已经构建了自己的变量处理程序 其中有一个 getitem 通过 data key 访问数据时使用的函数 它工作得很好 除了尝试访问项目链接时 data key subkey def getitem self key args pri