Python字典键(类对象)与多个比较器的比较

2024-07-01

我使用自定义对象作为 python 字典中的键。这些对象有一些默认值hash and eq定义的方法用于默认比较 但在某些功能中我需要使用不同的方式来比较这些对象。 那么有什么方法可以覆盖或传递一个新的比较器来仅针对该特定函数进行这些关键比较。

更新:我的课程具有以下类型的功能(此处我无法编辑hash方法,对其他地方影响很大)

class test(object):

    def __init__(self,name,city):
        self.name=name
        self.city=city

    def __eq__(self,other):
        hash_equality= (self.name==other.name)
        if(not hash_equality):
            #check with lower
            return (self.name.lower()==other.name.lower())


    def  __hash__(self):
        return self.name.__hash__()

my_dict={}
a=test("a","city1")
my_dict[a]="obj1"
b=test("a","city2")
print b in my_dict  #prints true
c=test("A","city1")
print c in my_dict  #prints false
print c in my_dict.keys() #prints true
# my_dict[c]   throw error

这是正常功能。但在一种特定方法中,我想覆盖/或传递一个新的自定义比较器,其中新的hash代码就像

def  __hash__(self):
    return self.name.lower().__hash__()

so that c in my_dict返回真

or my_dict[c] will return "obj1"

抱歉更新了这么多。

就像在排序中一样,我们可以将自定义方法作为比较器传递,有什么方法可以在这里做同样的事情。


实现此目的的唯一方法是使用新的哈希和比较函数创建字典的副本。原因是字典需要使用新的哈希函数重新哈希每个存储的键,以使查找按照您的期望进行。由于您无法向字典提供自定义哈希函数(它始终使用关键对象之一),因此最好的选择可能是将对象包装在使用自定义哈希和比较函数的类型中。

class WrapKey(object):
    __init__(self, wrapee):
        self._wrapee = wrapee

    __hash__(self):
        return self._wrapee.name.lower().__hash__()

    __eq__(self, other):
        return self._wrapee.name == other._wrapee.name


def func(d):
    d_copy = dict((WrapKey(key), value) for key, value in d.iteritems())
    # d_copy will now ignore case
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python字典键(类对象)与多个比较器的比较 的相关文章

  • 如何在 Python 中执行等效的 Excel INDEX MATCH

    我有一个问题 关于如何执行相当于使用 Excel 中的 INDEX MATCH 函数返回值并在 Python 中应用它的操作 作为一名对大型数据集执行数据分析和操作的 Excel 用户 为了提高效率 我已转向 Python 我试图做的是根据
  • Python,将 mongodump 的 bson 输出转换为 json 对象数组(字典)

    我已经使用转储了 mongodb 集合mongodump命令 输出是一个转储目录 其中包含以下文件 dump coll bson coll metadata json 如何将导出的文件打开到在 python 中工作的字典数组中 我尝试了以下
  • 从 pexpect 中提取 stderr

    我的问题很简单 我可以吗 expect 使用 pexpect 查看 stderr 上的某些输出 它似乎pexpect spawn 只能用于期望 stdout 上的输出 乌托邦的例子 import pexpect child pexpect
  • Python 内存使用情况

    因此 我有一些代码接收一组文件 将其可以缝合在一起 然后绘制它们 我发布了大部分代码 试图使其更具可读性 如果需要 可以添加更多代码 for paths dirs files in os walk start path for d in d
  • 如何在 Anaconda(Jupyter 笔记本)中导入 python 自定义类

    我无法找到如何使用 anaconda 中的 Jupyter 笔记本在 Python 中导入自定义类 在我的工作文件夹中有一个文件 用户 ipynb 包含类名User 在同一文件夹中的其他文件中 我尝试使用以下命令导入此类 从用户导入用户 我
  • PyCharm 中的进程已完成,退出代码为 137

    当我在 PyCharm 中手动停止脚本时 进程以退出代码 137 结束 但我没有停止脚本 仍然得到退出代码 137 有什么问题吗 Python版本是3 6 运行xgboost train 方法时处理完成 退出代码 137 意味着您的进程被
  • 从图像中读取文本

    关于将这些图像转换为文本有什么建议吗 我正在使用 pytesseract 除了这个之外 它在大多数情况下都工作得很好 理想情况下 我会准确地读取这些数字 最坏的情况我可以尝试使用 PIL 来确定 左边的数字是否为零 从左边开始 找到第一个白
  • 加速使用 Pyinstaller 创建的 .exe

    我已经使用 Pyinstaller 将我的程序 用 Python 3 6 1 编写 使用 Python 3 5 3 转换 从 py 转换为 exe 然而 它是加载速度极其缓慢 与在空闲状态下运行时我优化了我想什么问题是 导入大量模块 所以我
  • Python/Excel - IOError: [Errno 2] 没有这样的文件或目录:

    尝试从文件中提取 xlsx 文档并将数据编译到单个工作表中 尽管文件存在但仍收到 IOError 程序如下 loop that pulls in files from folder import os create directory fr
  • Python 中的一维马哈拉诺比斯距离

    我一直在努力validate我的计算代码马哈拉诺比斯距离写在Python 并仔细检查以比较 OpenCV 中的结果 我的数据点均为 1 维 5 行 x 1 列 In OpenCV C 我成功计算了马哈拉诺比斯距离方面数据点的尺寸为上述尺寸
  • 在窗口中定位画布 - Tkinter/python

    有没有办法将画布放置在窗口中并在其周围放置一个框架 我只找到了如何在画布内放置对象 您可以创建一个框架 然后将您的小部件放入其中 f tk Frame c1 tk Canvas f c2 tk Canvas f c1 pack side l
  • Discord.py 提供角色的反应机器人

    我如何制作一个机器人 当人们对特定事物做出反应时 它可以为他们分配角色 到目前为止我有这个但它不起作用 client event async def on ready channel client get channel 513546504
  • 如何在python中查找文件的mime类型?

    假设您想要将一堆文件保存在某个地方 例如保存在 BLOB 中 假设您想通过网页分发这些文件 并让客户端自动打开正确的应用程序 查看器 假设 浏览器通过 HTTP 响应中的 mime type 内容类型 标头确定要使用哪个应用程序 查看器 基
  • 在heroku上安装pdftotext库

    pdftotext 库是requirements txt 中的要求 在尝试推送到 heroku 时 出现以下错误 remote Running setup py install for pdftotext started remote Ru
  • 模拟 default=timezone.now 进行单元测试

    我正在尝试为执行大量日期时间操作的 django 应用程序编写单元测试 我已经安装了mock http www voidspace org uk python mock 给 django 打猴子补丁timezone now为了我的测试 虽然
  • 使用 plt 在热图上绘制梯度箭头

    我正在尝试绘制箭头以可视化热图上的梯度 这是我到目前为止的代码 import matplotlib pyplot as plt import numpy as np function to plot lambda x y x y 2 hor
  • 与 Pandas DataFrame 列表列的比较

    我有一个像这样的数据框 df col1 col2 a 1 2 b 3 4 c 3 9 我想根据匹配的输入数组获取行 因此如果我有数组 1 2 我可以获得 col1 col2 a 1 2 当我尝试使用此公式执行此操作时 它不起作用 df lo
  • 使用后禁用按钮

    最近我决定重写我的不和谐机器人并添加按钮 到目前为止我遇到的主要问题是我无法禁用按钮就在被按下之后人们被告知是关于button disabled True实际上 它会禁用该按钮 但它只是将其发送为禁用状态 因此永远无法按下它 我想要的是能够
  • 在 Django 中保存文件之前更改文件名

    我有下一个代码在 django admin 中上传时重命名我的文件 在 models py 中 def get file path instance filename ext filename split 1 filename s s uu
  • 用python划分两个数据框

    我有两个数据框 df1 and df2 df1 TIMESTAMP eq1 eq2 eq3 2016 05 10 13 20 00 40 30 10 2016 05 10 13 40 00 40 10 20 df2 TIMESTAMP eq

随机推荐

  • 如何使用鼠标指针和键盘快捷键捕获文本?

    我想使用 C 或 java 使用鼠标指针和键盘快捷键从打开的窗口捕获文本 喜欢babylon http babylon com 所以 我需要知道什么以及如何实施 我需要使用哪些库 或者我可以使用 winapi 吗 使用脚本语言创建您想要执行
  • Xcode 9、iOS 11、XCUITest 失败:主线程检查器 Flurry Analytics

    使用在 iOS 11 上运行的 Xcode 9 运行我的 XCUITests 套件 测试在 Xcode 8 iOS10 中运行完美 但在 Xcode 9 中出现以下错误 Main Thread Checker UI API called o
  • 将一串数字转换为数组

    我在创建将数字字符串转换为数组的程序时遇到问题 我知道这里有一个类似的问题 但我所要做的只是一组数字 例如 10 15 16 0 57 438 57 18 这是我到目前为止所拥有的 import java util Scanner publ
  • Whitelabel 错误页面 Swagger,此应用程序没有 /error 的显式映射,因此您将其视为后备 swagger2:3.0.0-SNAPSHOT

    尝试在 Spring Boot 2 3 1 中配置 swagger 摇篮配置 repositories mavenCentral maven url http oss jfrog org artifactory oss snapshot l
  • 图表加载时显示 HighCharts 工具提示

    我正在使用 Highcharts 来显示贷款保费金额的年份 当用户将鼠标悬停在图表区域上时 我显示十字准线和工具提示 但是 我想在图表最初加载时 没有 移动鼠标之前 显示这一点 有什么办法可以做到这一点吗 为了使工具提示具有粘性 我使用了下
  • Google 表单提交按钮的 onClick 事件

    这让我发疯 我有一个简单的 Google 表单 可以接受订阅者代码及其时段时间 我的目的是通过 Google Forms 获取数据并将其保存到 Google Sheets插槽计时没有任何冲突 为了向您展示一个示例 我附上了我的表格和工作表的
  • 在`../node_modules/react-native/React`中没有找到`React-Core`的podspec

    我正在使用 React Native 当我尝试上传 Pod 时遇到此问题 我已经成功安装了node modules 但遇到了这个问题 问题是什么 如果我们删除 package lock json 和 node modules 文件夹 我会重
  • 使用 NSPredicate 进行反向字符串比较

    我一直在互联网上寻找这个答案 但到目前为止还没有运气 所以我需要咨询这里聪明又友善的人 这是我第一次在这里提问 所以我希望我做得正确 不要重复这个问题 对于我看到的所有示例 搜索字符串是核心数据中存储的内容的子字符串 另一方面 我想实现以下
  • 为什么我们不能将新字符串分配给 char 数组,而是分配给指针?

    我试图将字符串重新分配给预初始化的数组 a 但我得到的只是一个错误 main char a Sunstroke char b Coldwave a Coldwave b Sunstroke printf n s s a b 错误 从类型 c
  • 使用变量时sql语句速度慢

    我在 MariaDB 10 1 26 上运行以下 SQL 语句 大约有 2 000 行 并且可以立即得到结果 select value datetime from Schuppen where value select min value
  • 在 ASP.NET MVC 3 Web 应用程序项目之间共享视图

    我有几个 ASP NET MVC 3 Web 应用程序 它们有很多通用对象 相同的登录控制器 他们的登录系统之间的一些差异体现在web config files 抬头 明细视图 发票 付款单 付款单等 为了减少代码的冗余 我将通用控制器和视
  • Reactive Cocoa - 以编程方式设置文本时,不会调用 UITextView 的 rac_textSignal

    我正在实现一个聊天 UI 并使用 Reactive Cocoa 在用户键入时调整聊天气泡的大小 目前 我正在根据 textview 更新 UI 的布局rac textSignal 一切都工作得很好 除了一点 当用户sends消息中 我以编程
  • Xcode 4 构建设置中缺少下拉列表

    我正在使用 Xcode 4 并且在 构建设置 中所有下拉列表都已消失 我没有下拉列表 而是文本框 例如 请参见此图片 我完全困惑 如何再次启用下拉列表 在 Xcode 中 编辑器 gt 显示值 它对我有用
  • 如何像这样包裹div?

    假设您有一个具有固定高度和重量的 div 在图中是最里面的一个 并且您希望周围的 div 包含它 其外边距为例如1 厘米 你会怎么做 一种方法是使用inline block显示风格 div border 1px solid blue div
  • Hoptoad v.异常 v.异常_通知 v.异常_记录器

    以下哪种异常通知解决方案最好 卓越的 http getexceptional com Hoptoad http hoptoadapp com 异常通知 http github com rails exception notification
  • F# Power 问题接受两个参数均为 bigint

    我目前正在尝试使用 F 在互联网上找到的文章很有帮助 但作为一名 C 程序员 我有时会遇到一些情况 我认为我的解决方案会有所帮助 但实际上没有帮助或只是部分帮助 因此 我对 F 缺乏了解 很可能对编译器的工作原理缺乏了解 可能是我有时感到完
  • Java中无法到达的语句编译错误[重复]

    这个问题在这里已经有答案了 class For1 public static void main String args int a 0 for break System out println a Line 1 a Line 2 我知道第
  • 是否可以自定义keycloak使用的user_entity表?

    我正在尝试使用 keyCloak 进行 SSO 我在keycloak中设置了mysql而不是嵌入式h2数据库 然而 有一个问题 在udemy的讲座上 讲师告诉我们不建议直接处理db table 由keycloak创建 如果业务需求应用程序处
  • Perl:什么时候使用 system() 以及什么时候安装软件包?

    我工作的项目在由系统人员维护的机器上使用 Perl 脚本 安装 Perl 模块等软件包并不是一件容易的任务 您通常必须打电话给有权限的人来执行此操作 等待几天 了解包的 API 然后记住将其安装在每台新安装的配置机器上 多次选择的替代方案只
  • Python字典键(类对象)与多个比较器的比较

    我使用自定义对象作为 python 字典中的键 这些对象有一些默认值hash and eq定义的方法用于默认比较 但在某些功能中我需要使用不同的方式来比较这些对象 那么有什么方法可以覆盖或传递一个新的比较器来仅针对该特定函数进行这些关键比较