python - 字典dict

1 创建字典

1.1 直接创建

字典由键值对组成,可直接使用花括号包住字典的键值对,直接创建一个字典:

>>> tom = {'name': 'Tom', 'age': 60}
>>> tom
{'age': 60, 'name': 'Tom'}

1.2 dict 函数

1.2.1 使用元组作为实参

>>> items = [('name', '张三'), ('age', 40)]
>>> d = dict(items)
>>> d
{'age': 40, 'name': '\xd5\xc5\xc8\xfd'}
>>> print(d['name'])
张三

1.2.2 使用关键字实参

>>> d = dict(name = '周星驰', age = 60)
>>> d
{'age': 60, 'name': '\xd6\xdc\xd0\xc7\xb3\xdb'}
>>> print(d['name'])
周星驰

2 操作字典

2.1 把字典用于字符串格式化

可以使用字符串的格式化函数 format_map,传入字典实参:

>>> actor={'name': '周星驰', 'age': 60, 'label': '喜剧之王'}
>>> '演员{name}今年{age}岁,他是著名的{label}'.format_map(actor)
'演员周星驰今年60岁,他是著名的喜剧之王'

2.2 设置字典项

>>> cartoon={}
>>> cartoon['name']='龙珠'
>>> cartoon['year']='1984'
>>> cartoon
{'name': '龙珠', 'year': '1984'}
>>>
>>> cartoon['name']='进击的巨人'
>>> cartoon['year']='2009'
>>> cartoon
{'name': '进击的巨人', 'year': '2009'}

2.3 删除所有字典项

>>> film={}
>>> film['name']='Titanic'
>>> film['boxOffice']='27亿美刀'
>>> film
{'name': 'Titanic', 'boxOffice': '27亿美刀'}
>>> film.clear()
>>> film
{}

2.4 浅拷贝

字典的 copy 方法可以实现浅拷贝:

>>> actor={'name': '周星驰', 'films': ['功夫', '喜剧之王', '逃学威龙']}
>>> actorReplica=actor.copy()
>>> actorReplica
{'name': '周星驰', 'films': ['功夫', '喜剧之王', '逃学威龙']}
>>> actor['films'].remove('逃学威龙')
>>> actor
{'name': '周星驰', 'films': ['功夫', '喜剧之王']}
>>> actorReplica
{'name': '周星驰', 'films': ['功夫', '喜剧之王']}

从上面的运行效果可知,actorfilms 删除了其中一项,actorReplicafilms 也受到了影响。这说明,字典的 copy 函数实现的是浅拷贝功能。

2.5 深拷贝

使用 copy 模块的 deepcopy 函数可实现深拷贝:

>>> from copy import deepcopy
>>> actor={'name': '周星驰', 'films': ['功夫', '喜剧之王', '逃学威龙']}
>>> actorReplica=deepcopy(actor)
>>> actor
{'name': '周星驰', 'films': ['功夫', '喜剧之王', '逃学威龙']}
>>> actorReplica
{'name': '周星驰', 'films': ['功夫', '喜剧之王', '逃学威龙']}
>>> actor['films'].remove('功夫')
>>> actor
{'name': '周星驰', 'films': ['喜剧之王', '逃学威龙']}
>>> actorReplica
{'name': '周星驰', 'films': ['功夫', '喜剧之王', '逃学威龙']}

2.6 get获取value

要获取字典下的项,如果使用 dict[key],如果 key 不存在,则会报 KeyError 异常:

>>> artists={'周星驰': '演员', '张家辉': '演员', '张学友': '演员&歌手'}
>>> artists['黎明']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: '黎明'

get 函数同样可以获取指定 key 对应的 value,但不同的是,当 key 不存在时,函数返回 None

>>> artists={'周星驰': '演员', '张家辉': '演员', '张学友': '演员&歌手'}
>>>
>>>
>>> if artists.get('黎明') == None: print('没有黎明的信息')
...
没有黎明的信息

get 函数还支持设置默认值,即如果 key 不存在时,使用默认值实参作为函数返回值:

>>> artists={'周星驰': '演员', '张家辉': '演员', '张学友': '演员&歌手'}
>>> artists.get('黎明', '黎明不在名单中,他是四大天王之一')
'黎明不在名单中,他是四大天王之一'

2.7 fromkeys创建字典

字典的 fromkeys 方法,使用 list 实参中的元素作为 key,创建一个 valueNone 的字典对象:

>>> {}.fromkeys(['name', 'age', 'occupation', 'city'])
{'name': None, 'age': None, 'occupation': None, 'city': None}

如果不想默认 valueNone,则可以在 fromkeys 方法中传入默认值实参:

>>> {}.fromkeys(['name', 'age', 'occupation', 'city'], '未知')
{'name': '未知', 'age': '未知', 'occupation': '未知', 'city': '未知'}

2.8 items获取字典项列表

>>> actor={'name': '周星驰', 'films': ['功夫', '喜剧之王', '逃学威龙']}
>>> items=actor.items()
>>> items
dict_items([('name', '周星驰'), ('films', ['功夫', '喜剧之王', '逃学威龙'])])

2.9 keys获取字典的key

>>> actor={'name': '周星驰', 'films': ['功夫', '喜剧之王', '逃学威龙']}
>>> actor.keys()
dict_keys(['name', 'films'])

2.10 pop 获取并删除项

>>> d={'name': '张三', 'age': 30}
>>> d
{'name': '张三', 'age': 30}
>>> d.pop('age')
30
>>> d
{'name': '张三'}

2.11 popitem 获取并删除最后一项

>>> d={'name': '张三', 'age': 30, 'role': 'developer', 'city': 'Guangzhou', 'country': 'China'}
>>> d.popitem()
('country', 'China')
>>> d
{'name': '张三', 'age': 30, 'role': 'developer', 'city': 'Guangzhou'}
>>> d.popitem()
('city', 'Guangzhou')
>>> d
{'name': '张三', 'age': 30, 'role': 'developer'}
>>> d.popitem()
('role', 'developer')
>>> d
{'name': '张三', 'age': 30}
>>> d.popitem()
('age', 30)
>>> d
{'name': '张三'}
>>> d.popitem()
('name', '张三')
>>> d
{}

2.12 setdefault

字典的 setdefault 用于获取指定 key 对应的 value,当 key 不存在时,会为该 key 设置默认值;如果 key 存在时,则返回对应的 value

>>> d={}
>>> d.setdefault('name', "张三")
'张三'
>>> d
{'name': '张三'}
>>> d.setdefault('name', '李四')
'张三'
>>> d
{'name': '张三'}

2.13 values 获取 value 列表

>>> d={'name': '张三', 'age': 30, 'role': 'developer', 'city': 'Guangzhou', 'country': 'China'}
>>> d.values()
dict_values(['张三', 30, 'developer', 'Guangzhou', 'China'])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值