博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Python基础7】字典
阅读量:4145 次
发布时间:2019-05-25

本文共 4506 字,大约阅读时间需要 15 分钟。

文章目录

dict字典定义

字典由及其相应的组成,这种键值对称为项(item)

键和值之间用冒号(:)分隔,项之间用逗号分隔,整个字典放在花括号内
people = {‘name’:‘Sudley’,‘age’:99}
在字典(以及其他映射类型)中,键必须是独一无二的

dict字典创建

>>> items = [('name','Sudley'),('age',99)]>>> d = dict(items)>>> d{
'name': 'Sudley', 'age': 99}>>> d2 = dict(name='Sudley',age=99)>>> d2{
'name': 'Sudley', 'age': 99}>>>

将两个列表合成一个字典

>>> lst1 = ['name','age']>>> lst2 = ['Sudley',99]>>> d = dict(zip(lst1,lst2))>>> d{
'name': 'Sudley', 'age': 99}>>>

基本的字典操作

  • len(d)返回字典的items数
  • d[k] 返回与键k相关联的值
  • d[k] = v 将值v关联到键k
  • del d[k] 删除键k的项
  • k in d 检查字典d是否包含键为k的项

字典和列表的主要区别

对比项 字典 列表
键VS索引 键可以是任何不可变的类型,如整数、浮点数(实数)、字符串或元组 索引是整数
自动添加 对原来没有的键赋值会新建一个项 无法直接对不存在的索引赋值,需要借助append等方法新增元素
成员资格(k in d) 查找的是键而非值 查找的是值而非索引

字典的方法

方法 描述
d.clear() 删除d的所有项
d.copy() 返回d的副本,执行的是浅复制
d.fromkeys(seq[, val]) 返回一个字典,其中的键来自seq,而值都被设置为val(默认为None)。可直接使用字典类型dict将其作为类的方法来调用
d.get(key[, default]) 若d[key]存在,就返回它的值;否则返回指定的默认值(默认为None)
d.items() 返回一个包含d各项(key,value)对的迭代器(视图)
d.iterkeys() 返回一个可用于对d的键进行迭代的迭代对象
d.keys() 返回一个包含所有键的迭代器(视图)
d.pop(key[, d]) 删除并返回对应键的值,若键不存在且设置了d则返回给定默认值d,若键不存在也没设置d则引发KeyError异常
d.popitem() 随机删除一个项,并以(key,value)对的方式返回
d.setdefault(key[, default]) 如果d[key]存在,就返回它的值;否则返回指定的默认值(默认为None),并将d[key]设置为指定的默认值
d.update(other) 将other中的每项都添加到d(可能覆盖既有的项)。也可以像调用字典构造函数那样指定类似的参数
d.value() 返回一个迭代器(视图),其中包含d中所有的值(可能有重复的)

方法举例

1.clear

>>> x = {
'key':'value'}>>> y = x>>> y{
'key': 'value'}>>> x = {
}>>> y{
'key': 'value'}>>> x = {
'key':'value'}>>> y = x>>> y{
'key': 'value'}>>> x.clear() #注意这里没有返回值,或者说返回None>>> y{
}>>>

2.copy

执行的是浅复制,当替换副本中的值时,原件不受影响。如果修改副本中的值(就地修改而不是替换),原件也将发生改变。
浅复制相关概念可参考

>>> x = {
'username':'admin','machines':['foo','bar','baz']}>>> y = x.copy()>>> y['username'] = 'root'>>> y['machines'].remove('bar')>>> y{
'username': 'root', 'machines': ['foo', 'baz']}>>> x{
'username': 'admin', 'machines': ['foo', 'baz']}>>> y['machines'][0] = 'bar'>>> y{
'username': 'root', 'machines': ['bar', 'baz']}>>> x{
'username': 'admin', 'machines': ['bar', 'baz']}>>> y['machines'] = 'bar'>>> y{
'username': 'root', 'machines': 'bar'}>>> x{
'username': 'admin', 'machines': ['bar', 'baz']}>>>

为了避免上述的问题可以执行深复制,即同时复制值及其包含的所有值,等等。

>>> from copy import deepcopy>>> x = {
'username':'admin','machines':['foo','bar','baz']}>>> y = deepcopy(x)>>> y['machines'].remove('bar')>>> y{
'username': 'admin', 'machines': ['foo', 'baz']}>>> x{
'username': 'admin', 'machines': ['foo', 'bar', 'baz']}>>>

3.fromkeys

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

4.get

>>> d = {
}>>> d['name']Traceback (most recent call last): File "
", line 1, in
d['name']KeyError: 'name'>>> d.get('name')>>> d{
}>>>

5.setdefault

>>> d = {
}>>> d.setdefault('name')>>> d{
'name': None}>>> d.setdefault('age','NA')'NA'>>> d{
'name': None, 'age': 'NA'}>>>

6.items

>>> x = {
'username':'admin','machines':['foo','bar','baz']}>>> x.items()dict_items([('username', 'admin'), ('machines', ['foo', 'bar', 'baz'])])>>> y = x.items()>>> y[0]Traceback (most recent call last): File "
", line 1, in
y[0]TypeError: 'dict_items' object is not subscriptable>>> print(y)dict_items([('username', 'admin'), ('machines', ['foo', 'bar', 'baz'])])>>> for i in y: #返回值y属于一种名为字典视图的特殊类型,可用于迭代但是不能索引 print(i) ('username', 'admin')('machines', ['foo', 'bar', 'baz'])>>>

7.keys

和上面一样可以迭代不能索引,字典是无序的。

>>> x = {
'username':'admin','machines':['foo','bar','baz']}>>> x.keys()dict_keys(['username', 'machines'])>>>

8.pop

>>> x = {
'username':'admin','machines':['foo','bar','baz'],'ip':'xx'}>>> x.pop() #必须带键值Traceback (most recent call last): File "
", line 1, in
x.pop()TypeError: pop expected at least 1 arguments, got 0>>> x.pop('ip')'xx'>>> x.pop('ip')Traceback (most recent call last): File "
", line 1, in
x.pop('ip')KeyError: 'ip'>>> x.pop('ip','ip?')'ip?'>>>

9.popitems

>>> x = {
'username':'admin','machines':['foo','bar','baz'],'ip':'xx'}>>> x.popitem() #随机弹出一个项('ip', 'xx')>>> x.popitem()('machines', ['foo', 'bar', 'baz'])>>>

10.update

>>> d = {
'username':'root', 'ip':'192.168.1.1', 'tty':'1'}>>> x = {
'username':'guest','tty':'2'}>>> d.update(x)>>> d{
'username': 'guest', 'ip': '192.168.1.1', 'tty': '2'}>>> y = {
'username':'guest','http':'2'}>>> d.update(y)>>> d{
'username': 'guest', 'ip': '192.168.1.1', 'tty': '2', 'http': '2'}>>>

转载地址:http://ouiti.baihongyu.com/

你可能感兴趣的文章
线程池ThreadPoolExecutor源码分析(二)
查看>>
LockSupport工具使用和源码分析
查看>>
ArrayBlockingQueue源码分析
查看>>
java面试题整理(一)基础部分
查看>>
JAVA内存模型
查看>>
java当中集合框架整理
查看>>
LinkedHashMap源码分析
查看>>
TreeMap源码分析
查看>>
HashSet与LinkedHashSet分析
查看>>
J.U.C包文档分析目录
查看>>
JAVA当中内部类
查看>>
JAVA当中的泛型
查看>>
JAVA反射中Class类源码分析及常见面试题
查看>>
Java对象和类的生命周期
查看>>
Java内存结构
查看>>
Java当中强引用、软引用、弱引用及虚引用
查看>>
JVM垃圾回收
查看>>
什么时候触发MinorGC?什么时候触发FullGC?
查看>>
G1收集器
查看>>
MySQL索引相关内容汇总
查看>>