python dict key类型_Python——dict(自定义类作key)

Python的dict要求key为不可变数据类型,通常采用str或int,但在某些应用场景下,需要采用自定义类型对象作key,

此时的自定义类需要实现两个特殊方法:__hash__、__eq__,用于哈希值的获取和比较

定义狗类:

class Dog():

def __init__(self,name,color):

self._n = name

self._c = color

def __hash__(self):

return hash(self._n + self._c)

def __eq__(self,other):

return (self._n,self._c)==(other._n,other._c)

定义房子:

from dog import Dog

dog_1 = Dog(name = 'mike',color = 'red')

dog_2 = Dog(name = 'tom',color = 'blue')

dog_3 = Dog(name = 'tom',color = 'blue')

#房子里有两只狗

house = {}

house[dog_1] = 1

house[dog_2] = 2

#每只狗对应的哈希值

print(hash(dog_1))

print(hash(dog_2))

print(hash(dog_3))

#输出每只狗的编号

for item in house:

print(house[item])

#名字和颜色相同的狗是同一只

print(house[dog_3]==2)

>>1019109570234974571

>>5676435319618840106

>>5676435319618840106

>>1

>>2

>>True

参考:

http://www.mamicode.com/info-detail-495084.html

https://blog.csdn.net/woshiaotian/article/details/20286149

python中自定义类对象json字符串化的方法

1. 用 json 或者simplejson 就可以 2.定义转换函数: def convert_to_builtin_type(obj): print 'default(', repr(obj), ...

HashMap中使用自定义类作为Key时,为何要重写HashCode和Equals方法

之前一直不是很理解为什么要重写HashCode和Equals方法,才只能作为键值存储在HashMap中.通过下文,可以一探究竟. 首先,如果我们直接用以下的Person类作为键,存入HashMap中, ...

(转).Net中自定义类作为Dictionary的key详解

在定义数据结构时,Dictionary提供了快速查找数据的功能,另外Dictionary< TKey, TValue >属于key-value键值对数据结构,提供了泛型的灵活性,是数据结构 ...

Python&colon; 自定义类对象序列化为Json串

之前已经实现了Python: Json串反序列化为自定义类对象,这次来实现了Json的序列化. 测试代码和结果如下: import Json.JsonTool class Score: math = ...

python面向对象反射-框架原理-动态导入-元类-自定义类-单例模式-项目的生命周期-05

反射 reflect 反射(reflect)其实是反省,自省的意思 反省:指的是一个对象应该具备可以检测.修改.增加自身属性的能力 反射:通过字符串获取对象或者类的属性,进行操作 设计框架时需要通过反 ...

关于MapReduce中自定义带比较key类、比较器类(二)——初学者从源码查看其原理

Job类 /**   * Define the comparator that controls    * how the keys are sorted before they   * are pa ...

Python中使用自定义类class作为海量数据结构时内存占用巨大的问题

最近碰到处理一个二十多兆的文件时内存蹭蹭的吃掉四百多兆,吓死宝宝了. 无奈毕竟接触python时间有限,还没有完整的看过python的一些基础知识,我想一个合格的pythoner应该不会碰到这个问题. ...

Python&colon; Json串反序列化为自定义类对象

最近刚接触到python,就想到了如何反序列化json串.网上找了一下,大部分都是用json模块反序列化为python数据结构(字典和列表).如果对json模块不了解的参考菜鸟教程.然后我在此基础上将 ...

Python面向对象6:抽象类和自定义类

抽象类- 抽象方法: 没有具体实现内容的方法成为抽象方法- 抽象方法的主要意义是规范了子类的行为和接口- 抽象类的使用需要借助abc模块 import abc - 抽象类:包含抽象方法的类叫抽象类,通 ...

随机推荐

SimpleXML操控XML

复杂字符串如下: $_xml=<<<_xml version="1.0" encoding="utf-8"> &lt ...

一塔湖图(codevs 1024)

题目描述 Description 小松所在的PK大学校园又称作燕园,是一个十分美丽的校园.有博雅塔,未名湖,亚洲最大的高校图书馆,人称“一塔湖图”.但是由于燕园的历史比较悠久,所以很多的老房子都要不断 ...

算法(Algorithm)是什么?

我们用煎蛋来打个比方.煎蛋的一般步骤是: 1.>取煎锅. 2.>取油. ->我们有油吗? ****有,把油倒入煎锅. ****没有,我们要去买油吗? #########要买,出去买油 ...

celery rabbit mq 详解

Celery介绍和基本使用 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, ...

java基础&lpar;四&rpar;-----抽象类与接口

抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类 我们 ...

K8s简单yaml文件运行例子deployment

kubectl run 创建并运行一个或多个容器镜像. 创建一个deployment 或job 来管理容器. kubectl run 语法: $ run NAME --image=image [--e ...

postgresql中uuid的使用

本文总共介绍两种方法 : 1.使用create extension命令 create extension "uuid-ossp" 安装扩展成功以后,就可以通过uuid_genera ...

Visual Studio 2017 社区版的安装与组件修改(C&plus;&plus;)

0. 环境描述 需求:用VS2017做C++简易开发. 操作系统:Windows 8.1. 1. 下载 MSDN下载VS2017社区版. https://msdn.itellyou.cn/ 下载后: ...

SpringBoot -- 计划任务

从Spring 3.1 开始,计划任务在Spring中的实现变得异常的简单.首先通过在配置类注解@EnableScheduling 来开启对计划任务的支持,然后再执行集合任务的方法上注解@Schedu ...

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值