python--用户自定义类对象作为dict的key

PS: 学好了Java,学Python 会容易

在Java 中如果 用户自定义的类要作为HashMap的key, 则这个类需要实现equals 和 hashCode ,在python 中也是相同的只不过相应的函数名称发生了变化,变为__hash__ 和__eq__ 

参考

http://docs.python.org/2/library/functions.html?highlight=hash#hash

http://docs.python.org/2/reference/datamodel.html#object.__hash__

__hash__ 函数必须返回整数值, 另外需要留意的函数是hash() , 这个函数是内建函数,可以返回一个对象的hash值,如果有的话(其实就是如果实现了__hash__) ,否则返回的对象在内存中的地址

下面看一段代码的例子

class MemDev(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __hash__(self):
        return hash(self.name + str(self.age))

    def __eq__(self, other):
        if self.name == other.name and self.age == other.age:
            return True
        return False

dd = {}
a = MemDev('zhangsan',4)
print hash(a)
b = MemDev('zhangsan',4)
print hash(b)
dd[a] =5
dd[b] = 6
dd[MemDev('lisi',6)] = 7
for item in dd:
    print item, dd[item]

执行结果:

-811027391
-811027391
<__main__.MemDev object at 0xb76c0bcc> 6
<__main__.MemDev object at 0xb76c0d8c> 7


set object is an unordered collection of distinct hashable objects. Common uses include membership testing, removing duplicates from a sequence, and computing mathematical operations such as intersection, union, difference, and symmetric difference. (For other containers see the built in dictlist, and tuple classes, and the collections module.)


所以情况同样适用于set



  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python2中,字典(dict)是一个无序的容器类型,它存储的是值对(key-value)的数据。如果要按照自定义顺序对字典进行排序,需要进行以下步骤: 1. 创建一个带有自定义顺序的列表(List),用于指定key)的排序顺序。 2. 使用sorted()函数对字典的进行排序,在排序的过程中,使用自定义顺序列表作为key参数的排序规则。 3. 创建一个新的有序字典(OrderedDict)。 4. 遍历排序后的列表,从原始字典中取出对应的值,并将值对逐个添加到有序字典中。 下面是一个简单的示例代码: ```python # 导入OrderedDict模块 from collections import OrderedDict # 定义自定义顺序列表 order = ["key3", "key1", "key2"] # 原始字典 my_dict = {"key1": "value1", "key2": "value2", "key3": "value3"} # 对原始字典的按照自定义顺序进行排序 sorted_keys = sorted(my_dict.keys(), key=lambda x: order.index(x)) # 创建一个新的有序字典 sorted_dict = OrderedDict() # 遍历排序后的列表,从原始字典中取出对应的值,并将值对添加到有序字典中 for key in sorted_keys: sorted_dict[key] = my_dict[key] # 打印有序字典 print(sorted_dict) ``` 运行以上代码,将按照自定义顺序对字典进行排序并打印结果。 注意:以上示例代码使用了collections模块中的OrderedDict类,因为Python2的普通字典是无序的,无法保证的顺序。OrderedDict类是一个有序字典,可以按照添加顺序保持的顺序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值