Python 从入门到放弃(三)

Python 从入门到放弃(三)

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 "<ipython-input-294-e600c2b8f646>", line 1, in <module>
    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下午

posted @ 2017-12-11 15:13  毛利小九郎  阅读(98)  评论(0编辑  收藏  举报