Python:字典

来源:互联网 发布:网站源码吧 编辑:程序博客网 时间:2024/05/01 10:18

字典是内建映射类型,没有特殊的顺序,但是都存储在一个特定的键(key)里,键可以是数字、字符串,甚至是元组


1、字典创建:

>>> items = {'Alice': '2341', 'Beth': 9102, 'Cecil': '3258'}

2、相关函数

1、dict函数

通过其他映射(比如字典)或者(键,值)这样的序列对建立字典

>>> items = [('name', 'Gumby'), ('age', 42)]>>> d = dict(items)>>> d{'age': 42, 'name': 'Gumby'}
通过关键字参数来创建字典

>>> d = dict(name = 'Gumby', age = 42)>>> d{'age': 42, 'name': 'Gumby'}

2、基本操作

len(d):返回d中项的数量

d[k]:返回关联到键K上的值

d[k] = v:将值v关联到键K上

del d[k]:删除键K的项

k in d:检查d中是否有键为K的项


3、clear函数

清楚字典中的项,操作原字典,无返回序列

>>> d = {}>>> d['name'] = 'Gumby'>>> d['age'] = 42>>> d{'age': 42, 'name': 'Gumby'}>>> returned_value = d.clear()>>> d{}

4、copy函数

返回一个与原字典相同的新字典(浅复制)

>>> x = {'username': 'admin', 'machines':['foo', 'bar', 'baz']}>>> y = x.copy()>>> y['username'] = 'mlh'>>> y['machines'].remove('bar')>>> y{'username': 'mlh', 'machines': ['foo', 'baz']}>>> x{'username': 'admin', 'machines': ['foo', 'baz']}
副本中替换的时候原始字典不受影响,但是修改了某个值,原始字典也会改变

深复制:deepcopy函数

>>> from copy import deepcopy>>> d = {}>>> d['name'] = ['Alfred', 'Bertrand']>>> c = d.copy()>>> dc = deepcopy(d)>>> d['name'].append('Clive')>>> d{'name': ['Alfred', 'Bertrand', 'Clive']}>>> c{'name': ['Alfred', 'Bertrand', 'Clive']}>>> dc{'name': ['Alfred', 'Bertrand']}


浅copy还有个隐藏的知识:
1.在副本字典中修改这些不可变对象(如字符串,数字,元组[只包含不可变对象的元组])是不会影响原始字典
2.在副本字典中修改可变对象,那么原始字典的内容会被影响

原因:不可变对象发生变化时会生成新的引用指向新的值,而可变对象的值发生变化时,不会生成新的引用


5、fromkeys函数

使用给定的键建立新的字典,默认键值为None,也可以自己提供默认值

>>> {}.fromkeys(['name', 'age']){'age': None, 'name': None}>>> dict.fromkeys(['name', 'age'], '(unknown)'){'age': '(unknown)', 'name': '(unknown)'}

6、get函数

访问字典项的方法,访问不存在的字典项,返回None(一般情况下,访问不存在的字典项时,会出错)

>>> d = {'name': 'Lily'}>>> print d.get('name')'Lily'>>> print d.get('age')None>>> d['age']Traceback (most recent call last):  File "<pyshell#45>", line 1, in <module>    d['age']KeyError: 'age'
可以选择默认值,在访问值不存在的时候显示

>>> d.get('age', 'no age')'no age'

7、has_key函数

同表达式 k in d,检测字典中是否含有指定项

>>> d = {'name': 'Lily'}>>> d.has_key('name')True>>> d.has_key('age')False


8、items和iteritems

items方法将所有的字典项以列表方式返回,没有特殊的顺序

iteritems返回一个迭代器对象

>>> d = {'title': 'Python Web Site', 'url': 'http://www.python.org', 'spam': 0}>>> d.items()[('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')]>>> it = d.iteritems()>>> it<dictionary-itemiterator object at 0x0124C8D0>>>> list(it)[('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')]

9、keys和iterkeys

keys将字典中的键以列表形式返回

iterkeys返回针对键的迭代器


10、pop函数

获得对应于给定键的值,然后将这个键-值从字典中移除

>>> d = {'value1': 'aa', 'value2': 'bb'}>>> d.pop('value1')'aa'>>> d{'value2': 'bb'}


11、popitem函数

随即弹出一个项,返回该项,并从字典中移除


12、setdefault函数

基本同get函数,在字典不含有给定键的情况下设定相应的键值,默认为None

>>> d = {}>>> d.setdefault('name', 'N/A')'N/A'>>> d{'name': 'N/A'}


13、update函数

利用一个字典更新另外一个字典

>>> d = {'vale1': 'aa', 'value2': 'bb'}>>> d{'vale1': 'aa', 'value2': 'bb'}>>> x = {'value3': 'cc'}>>> d.update(x)>>> d{'vale1': 'aa', 'value3': 'cc', 'value2': 'bb'}


14、values和itervalues

values以列表形式返回字典中的值,itervalues返回的则是相应的迭代器(返回的列表中可以包含相同的元素)


3、格式转换

例:html格式(模板)

>>> template = '''<html><head><title>%(title)s</title></head><body><h1>%(title)s</h1><p>%(text)s</p></body>'''>>> data = {'title': 'My Home Page', 'text': 'Welcome to my home page!'}>>> print template % data<html><head><title>My Home Page</title></head><body><h1>My Home Page</h1><p>Welcome to my home page!</p></body>


原创粉丝点击