Python:字典

字典是内建映射类型,没有特殊的顺序,但是都存储在一个特定的键(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>


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值