《Python基础教程》读书笔记04-字典
创建字典和 dict 函数
>>> x = {"zhang": "12321", "wang": "4321"}
>>> y = {}
>>> x
{'wang': '4321', 'zhang': '12321'}
>>> y
{}
dict 函数,可以通过其他映射(如其他字典)或者(键,值)对的序列建立字典。
>>> items = [('name', 'zhang'), ('age', 18)]
>>> x = dict(items)
>>> x
{'age': 18, 'name': 'zhang'}
>>> x['age']
18
也可以使用关键字参数来创建字典。
>>> x = dict(name='zhang', age=18)
>>> x
{'age': 18, 'name': 'zhang'}
>>>
基本字典操作
>>> x
{'age': 18, 'name': 'zhang'}
>>> len(x) # 返回键值对的数量
2
>>> x['name'] # 返回键所对应的值
'zhang'
>>> x['id'] = 1 # 将值关联到键上,键起始不存在x上,会自动添加
>>> x
{'age': 18, 'name': 'zhang', 'id': 1}
>>> x['id'] = 2 # 如果键起始存在x上,则会更改值
>>> x
{'age': 18, 'name': 'zhang', 'id': 2}
>>> del x['id'] # 删除键所对应的项
>>> x
{'age': 18, 'name': 'zhang'}
>>> 'name' in x # 检查是否存在该键
True
字典的方法
clear
clear() 方法清除字典中的所有的项。无返回值 (None)
>>> x
{'age': 18, 'name': 'zhang'}
>>> x.clear()
>>> x
{}
copy
copy() 方法返回一个具有相同键值对的新字典(浅复制)。
如果修改了某个值(不是替换),原字典也会改变。
>>> x = {'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
>>> y = x.copy()
>>> y['username'] = 'mlh' # 不影响 x
>>> y
{'username': 'mlh', 'machines': ['foo', 'bar', 'baz']}
>>> y['machines'].remove('bar') # 影响 x
>>> y
{'username': 'mlh', 'machines': ['foo', 'baz']}
>>> x
{'username': 'admin', 'machines': ['foo', 'baz']}
deepcopy
深复制,复制其包含的所有值。
>>> from copy import deepcopy
>>> d = {'name': ['Alfred', 'Bertrand']}
>>> c = d.copy()
>>> dc = deepcopy(d)
>>> d['name'].append('Clive')
>>> c
{'name': ['Alfred', 'Bertrand', 'Clive']}
>>> dc
{'name': ['Alfred', 'Bertrand']}
fromkeys
fromkeys 方法使用给定的键建立新的字典,每个键都对应一个默认的值 None。
>>> {}.fromkeys(['name', 'age'])
{'name': None, 'age': None}
>>> dict.fromkeys(['name', 'age']) # 不用多创建一个空字典
{'name': None, 'age': None}
>>> dict.fromkeys(['name','age'], '(unknown)') # 默认值
{'name': '(unknown)', 'age': '(unknown)'}
get
get 方法可以更宽松的访问字典。
>>> x = {}
>>> x['name'] # 访问不存在的键出错
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
x['name']
KeyError: 'name'
>>> print (x.get('name'))
None
>>> x.get('name', 'N/A') # 可以设置默认值
'N/A'
>>> x['name'] = 'zhang'
>>> x.get('name') # 如果字典中存在该键,和普通查询一样
'zhang'
setdefault
setdefaule 方法和 get 方法类似,不同的是 setdefault 可以在字典不含有给定键时设置相应的键值。
>>> x = {}
>>> print (x.setdefault('name')) # 不含给定键,设置相应的键值,默认值为None
None
>>> x
{'name': None}
>>> x.setdefault('age','N/A') # 不含给定键,设置相应的键值,提供默认值
'N/A'
>>> x
{'age': 'N/A', 'name': None}
>>> x.setdefault('age','18') # 含有给定键,返回值,不修改
'N/A'
>>> x
{'age': 'N/A', 'name': None}
items
items() 方法将字典的所有项以列表的方式返回。
# Python2
>>> x = {'name': 'zhang','age': 18}
>>> x.items()
[('age', 18), ('name', 'zhang')]
# Python3
>>> x = {'name': 'zhang','age': 18}
>>> y = x.items()
>>> y
dict_items([('name', 'zhang'), ('age', 18)])
>>> type(y)
<class 'dict_items'>
iteritems
iteritems() 方法返回一个迭代器对象。Python3 无此方法
x.iteritems()
# <dictionary-itemiterator object at 0x030BF510>
for y in x.iteritems():
print y
# ('age', 18)
# ('name', 'zhang')
keys,iterkeys 和 values,itervalues
keys 方法将字典中的键以列表形式返回,iterkeys 返回迭代器。
Python3,keys 方法返回 dict_keys(['name', 'age'])
,无 iterkeys 方法。
values 方法将字典中的键以列表形式返回,itervalues 返回迭代器。
Python3,values 方法返回 dict_values(['zhang', 18])
,无 itervalues 方法。
pop
pop 方法用来获得给定键的值,然后将这个键值对从字典中移除。
>>> x
{'age': 18, 'name': 'zhang', 'id': 1}
>>> x.pop('id')
1
>>> x
{'age': 18, 'name': 'zhang'}
>>> x.pop('id') # 键不存在报错
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
x.pop('id')
KeyError: 'id'
popitem
popitem() 方法弹出随机的项,因为字典是无序的。如果想一个一个的移除并处理项,就很有用。
>>> x
{'age': 18, 'name': 'zhang'}
>>> x.popitem()
('name', 'zhang')
>>> x
{'age': 18}
update
update 方法可以利用一个字典项更新另一个字典,提供的字典中的项会被添加到旧的字典中,若有相同的键则会进行覆盖。
>>> x
{'age': 18, 'name': 'zhang'}
>>> y = {'age':'N/A','a':'N/A'}
>>> x.update(y)
>>> x
{'age': 'N/A', 'name': 'zhang', 'a': 'N/A'}
循环遍历字典
d = {'x': 1, 'y': 2, 'z': 3}
for key in d:
print(key, ':', d[key])
# x : 1
# y : 2
# z : 3
for key,value in d.items():
print(key, ':', value)
# x : 1
# y : 2
# z : 3
循环删除
for key in list(d.keys()):
del d[key]
排序
按 key 值对字典排序
先来基本介绍一下 sorted 函数,sorted(iterable, key, reverse)
,sorted 一共有 iterable, key, reverse 这三个参数。
- iterable:表示可以迭代的对象,例如可以是 dict.items()、dict.keys() 等
- key:是一个函数,用来选取参与比较的元素
- reverse:则是用来指定排序是倒序还是顺序,reverse=true 则是倒序,reverse=false 时则是顺序,默认时 reverse=false。
>>> d = {'x': 12, 'y': 22, 'z': 3}
>>> sorted(d.keys())
['x', 'y', 'z']
按 value 值对字典排序
>>> sorted(d.items(), key=lambda item:item[1])
[('z', 3), ('x', 12), ('y', 22)]
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com
文章标题:《Python基础教程》读书笔记04-字典
文章字数:1.8k
本文作者:Bin
发布时间:2017-01-01, 17:15:28
最后更新:2019-08-06, 00:07:35
原始链接:http://coolview.github.io/2017/01/01/Python%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/%E3%80%8APython%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B%E3%80%8B%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B004-%E5%AD%97%E5%85%B8/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。