# -*- coding:utf-8 -*-
'''
Created on 2015.06.09
@author: DXL
Copyright (C) 2004-2012 Shandong Leadom Software Development Co.,Ltd
'''
class mylist(list):
pass
class Multimap(dict):
def __setitem__(self, key, value):
if key not in self:
dict.__setitem__(self, key, value) # call super method to avoid recursion
else:
v = self.get(key)
if isinstance(v,mylist):
v.append(value)
else:
vl = mylist()
vl.append(v)
vl.append(value)
dict.__setitem__(self, key, vl)
def items(self):
its = dict.items(self)
ret = []
for k,v in its:
if isinstance(v,mylist):
for vv in v:
ret.append((k,vv))
else:
ret.append((k,v))
return ret
def has_key(self,k):
ret = dict.has_key(self,k)
if not ret:
return 0
ret = dict.__getitem__(self,k)
if isinstance(ret,mylist):
return len(ret)
return 1
if __name__ == '__main__':
t = Multimap()
t[0] = 1
t[1] = 2
t[1] = 3
for k,v in t.items():
print k,v
print t[1]
print t[0]
#
# print t.has_key(1)
# print t.has_key(0)
# print t.has_key(5)
# print 'None,hash:',hash(None)
# print 'False,hash:',hash(False)
# print 'True,hash:', hash(True)
# print True > False
# print False > None
# print None > False
# print False < None
# print False == None
派生map 使之变成 multimap
最新推荐文章于 2022-12-30 15:06:19 发布