《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" 转载请保留原文链接及作者。

目录