2011/12/11 Mon 13:58
用名字来引用值的数据结构叫做映射(mapping),python中用字典实现。
直接创建:
phonebook = {'Alice': '1234', 'Bob': '2345'}
phonebook
Out[224]: {'Alice': '1234', 'Bob': '2345'}
或者通过关键词参数:
phonebook = dict(Alice = '1234', Bob='2345')
# 注意关键字不能是expression,不是‘Alice’而是Alice
phonebook
Out[228]: {'Alice': '1234', 'Bob': '2345'}
或者通过键值对序列建立:
items = [('Alice','1234'), ('Bob','2345')]
phonebook = dict(items)
phonebook
Out[232]: {'Alice': '1234', 'Bob': '2345'}
dict中的key可以是任意不可变类型。,如果key不存在,自动添加,比如:
phonebook
Out[232]: {'Alice': '1234', 'Bob': '2345'}
phonebook['Conan'] = '3456'
phonebook
Out[235]: {'Alice': '1234', 'Bob': '2345', 'Conan': '3456'}
格式化文本:
'Conan\'s phonenumber is %(Conan)s' % phonebook
Out[237]: "Conan's phonenumber is 3456"
注意需要在百分号之后指定key,用()括起来,并在后面跟上其他的说明元素,如s。
copy实现浅复制:
phonebook
Out[261]: {'Alice': '1234', 'Bob': '2345', 'Conan': ['3456', '6666']}
y = phonebook.copy()
y['Bob'] = '8888'
y
Out[264]: {'Alice': '1234', 'Bob': '8888', 'Conan': ['3456', '6666']}
phonebook
Out[265]: {'Alice': '1234', 'Bob': '2345', 'Conan': ['3456', '6666']}
y['Conan'].remove('6666')
y
Out[267]: {'Alice': '1234', 'Bob': '8888', 'Conan': ['3456']}
phonebook
Out[268]: {'Alice': '1234', 'Bob': '2345', 'Conan': ['3456']}
在浅复制中,替换不影响原来的,但是原位修改是不行滴,因为原始字典中也有同样的值,也会受影响。
深复制:deepcopy
from copy import deepcopy
dc = deepcopy(phonebook)
dc
Out[271]: {'Alice': '1234', 'Bob': '2345', 'Conan': ['3456']}
phonebook
Out[272]: {'Alice': '1234', 'Bob': '2345', 'Conan': ['3456']}
dc['Conan'].remove('3456')
dc
Out[274]: {'Alice': '1234', 'Bob': '2345', 'Conan': []}
phonebook
Out[275]: {'Alice': '1234', 'Bob': '2345', 'Conan': ['3456']}
dc['Kid'] = '9999'
dc
Out[277]: {'Alice': '1234', 'Bob': '2345', 'Conan': [], 'Kid': '9999'}
phonebook
Out[278]: {'Alice': '1234', 'Bob': '2345', 'Conan': ['3456']}
从key的序列中建构dict:fromkeys
dict.fromkeys(['alpha','beta', 'gamma'])
Out[279]: {'alpha': None, 'beta': None, 'gamma': None}
访问字典项:get,对于没有的项不会报错,会返回None或者自定义的default。而直接用key取就会报错:
greek
Out[288]: {'alpha': 'a', 'beta': 'b', 'gamma': 'c'}
greek.get('alpha')
Out[289]: 'a'
greek.get('delta')
greek.get('delta','N/A')
Out[291]: 'N/A'
greek.get('beta','N/A')
Out[292]: 'b'
greek['gamma']
Out[293]: 'c'
greek['delta']
Traceback (most recent call last):
File "" , line 1, in
greek['delta']
KeyError: 'delta'
检索键值存在:has_key
greek.has_key('alpha')
Out[295]: True
greek.has_key('eta')
Out[296]: False
返回(键,值)对:items
greek.items()
Out[297]: [('alpha', 'a'), ('beta', 'b'), ('gamma', 'c')]
返回键:keys
greek.keys()
Out[298]: ['alpha', 'beta', 'gamma']
返回值:values
greek
Out[313]: {'alpha': 'A', 'beta': 'b', 'eta': 'e', 'gamma': 'c'}
greek.values()
Out[314]: ['b', 'e', 'A', 'c']
设置default:setdefault
greek.setdefault('alpha','Nil')
Out[299]: 'a'
greek.setdefault('zeta','Nil')
Out[300]: 'Nil'
greek
Out[301]: {'alpha': 'a', 'beta': 'b', 'gamma': 'c', 'zeta': 'Nil'}
可以看出,如果已经有了该key,返回其value,否则加入并设置default。
用x字典更新y字典:y.update(x)
如果y中没有x中的某项,即没有该key,则添加上,如果有,则用x中该key对应的value更新。
newgreek = dict(alpha='A',eta='e')
newgreek
Out[310]: {'alpha': 'A', 'eta': 'e'}
greek
Out[311]: {'alpha': 'a', 'beta': 'b', 'gamma': 'c'}
greek.update(newgreek)
greek
Out[313]: {'alpha': 'A', 'beta': 'b', 'eta': 'e', 'gamma': 'c'}
THE END
星期一, 11. 十二月 2017 03:12下午