Python的字典是可变hash实现的,类似perl中的关联数组
基本操作
#create
adic = {}
bdic = {'name':'zdsfsf', 'port': 90, 'dfs':['fd', 2, 9.0]}
cdic = dict((['x', 1], ['y', 2]))
ddic = {}.fromkeys(('x','y'), -1) #默认是 None
fdic = {1:'fdsfg', '1':dsf, 8.2:9.2} #都可以做key,只要是可hash的
#access
for key in adic.keys()
(key, adic[key])
if key in adic: #推荐
adic[key]
if adic.has_key(key):
adic[key]
#update=set,有则访问,无则创建
adic['name'] = 'fdsf'
adic['bbbb'] = 'asf'
print 'host %(name) is running on port %(port)' %adic
#delete
del adic['name']
adic.clear()
del adic
adic.pop('name')
映射类型操作符
#不支持拼接和重复 adic+bdic, adic*6 不支持,因为没有意义
#标准类型操作符
<
>
!=
#映射类型操作符
[]
in
not in
内建函数和工厂函数
type()
str()
cmp()
dict()
#1-传入可迭代对象,序列或迭代器,每个元素必须成对,第一个key,第二个是value
dict(zip(('x','y'), (1,2)))
dict([['x',1], ['y',2]])
dict([('xy'[i-1],i) for i in range(1,3)])
#2-传入字典对象,
dict(x=1,y=2)
anotherdic = dict(adic)
fdic = adic.copy() #推荐使用
len(mapping)
hash(obj)
#判断一个对象是否可以作为字典的key
#返回整型值,失败产生TypeError错误
映射类型内建方法
adic.keys() #返回key的list
adic.values() #返回value的list
adic.items() #返回(key,value)元组的list
adic.clear() #清空字典里所有元素
adic.fromkeys(seq, value=None) #依据列表作为key,建立dic,值采用value,默认None
adic.get(key, default=None) #不存在的时候,返回default值,默认None
adic.has_key()
adic.iter()
adic.pop(key, default) #和get类似,只不过是删除然后返回
adic.setdefault(key, default=None) #不存在,就赋值default
adic.update(adic2) #将另一个字典的全部元素加到这个字典中,重复key则更新
adic.copy() #浅复制
sorted(adic)
#为节省内存 Views?
adic.iterkeys()
adic.iteritems()
adic.itervalues()
字典的键
- 任何类型都可以做为键,包括自定义类型,但必须是可hash的
- 所有不可变的类型都是可哈希的,1和1.0哈希的值一样,是相同的键
- 可变类型,比如一个类可以提供hash方法,返回整型值,也可以做键,比较特殊
- 数字、字符串可以做键,对于元组来说,只有仅包括数字和字符串的元组可以做键
- 不允许一个键对应多个值
Reference
Python核心编程