python学习之:字典(dict)

python学习之:字典(dict)

学这之前,感觉python的自带的IDE:IDEL有点low,于是安装了pycharm,开始用pycharm编写,至于pycharm专业版的破解,上一篇博客有转载大佬的博客


眼看着马上就得返校了,然鹅摸鱼的我,一没刷好ACM题,二没完成老师安排的自学好python。。。,看来这几天得好好学了,fighting!!
学完了列表、元组和字符串之后,终于接触到了比较高级的python一个数据结构:字典,我觉得就是C++STL中的map(映射,高级点叫做红黑树),于是学起来感觉还挺简单的


一、字典基本概念以及建立与基本操作


字典是python中唯一内建的映射类型,简单点就是这种结构存放对应的 键/值对,每组都是键(key)与值(value)一 一对应。

1.字典创建格式:

d={key1:value1,key2:value2}

其中,关键的是键必须是唯一的,但是值不一定,可以去任何数据类型,而键必须是不可变的,如字符串、数字或者元组

例如:

student={'小萌':'1001','小明':'1002'};
print('student字典为:',student);

2.dict函数:

可以通过其他映射(如其他字典)或者键/值序列来建立序列,例如:

student=[('name','小萌'),('number','1001')];
detail=dict(student);
print('学生详细信息为:',detail);
print('学生姓名为:',detail['name']);

3.字典的基本操作:

(1):修改字典

即:增加、修改或者删除键/值对

例如:

student={'小萌':'1001','小明':'1002'};
print('小萌的学号为:%s'%student['小萌']);
student['小萌']='1003';            #更新小萌的学号(注意只能修改值,键是确定的,前面有讲)
print('小萌的学号为:%(小萌)s'%student);        #至于%(小萌)s操作属于字典的格式化字符串,后面会讲
student['小强']='1008';        #添加一个键/值对
print('学生信息:',student);

(2):删除字典元素(或者字典)

例如:

student={'小萌':'1001','小明':'1002'};
print('删除前字典:',student);
del student['小萌'];          #删除键'小张'
print('删除后字典:',student);
del student;          #删除整个字典
# print('删除后字典:',student);    #这一行不注释的话会报错,NameError: name 'student' is not defined

(3):字典键的特性:

同样也是值可以取任意值,但键不行,

1)、不允许同一个键出现两次
如果出现两次的话,前面的值会被后面的值覆盖,例如:

student={'小萌':'1001','小明':'1002','小萌':'1009'};
print('学生信息:',student);

输出的话,则小萌的对应的为:1009

2)、键必须不可变,可以用数字、字符串或者元组充当,但是不能用列表

(4).len函数:

用来计算字典元素个数,即键的总数,例如:

student={'小萌':'1001','小明':'1002','小萌':'1009'};
print('student字典元素个数:%d'%len(student));

(5).type函数:

即:返回输入的变量类型

4.字典的格式化字符串

例如:

student={'小萌':'1001','小明':'1002','小智':'1004'};
print('小智的学号为:%(小智)s'%student);

其实也就是这回事

5.字典与列表区别

dict特点:
(1)查找和插入速度极快,不会随着key的增加而变慢
(2)需要占用大量的内存,内存浪费大

list特点:
(1)查找和插入的时间随着元素的增加而增加
(2)占用空间小,浪费内存很少

实质:dict是使用空间换取时间


二、字典方法(即:相应函数)


1.clear()

具体操作:dict.clear()
例如:

student={'小萌':'1001','小明':'1002','小智':'1003'};
print('字典元素个数为:%d'%len(student));
student.clear();
print('字典的个数为:%d'%len(student));

2.copy()

具体操作:dict.copy()

需要注意,这里的copy为浅复制(即:当改变复制字典的值(原地修改,不是替换)时,原字典的值也会改变),但是深复制不会出现这个情况

具体如下:

student={'小萌':'1001','小明':'1002','小智':['1003','man']};
st=student.copy();
print('copy所得到的字典为:',st);
print('原字典student为:',student);
st['小萌']='1009';
print('字典st为:',st);
print('原字典student为:',student);
st['小智'].remove('man');
print('字典st为:',st);
print('原字典为:',student);

很明显可以知道,当只是替换对应的值时,是对原字典没有影响的,但是修改时,却是同样改变了原始字典,但是深复制可以避免该问题

3.fromkeys()

用于创建一个新字典,以序列seq中的元素做字典的键,字典的值被附以初始值

具体使用:dict.fromkeys(seq[,value])

例如:

seq=['name','age','sex'];
info=dict.fromkeys(seq);
print('新的字典为:',info);
info=dict.fromkeys(seq,10);
print('新的字典为:',info);

4.get()

具体使用:dict.get(key)
key表示字典中要查找的键,如果不存在时则返回默认值

例如:

student={'小萌':'1001','小明':'1002'};
print('小明的学号为:%s'%student.get('小明'));

5.key in dict

即:判断键是否在字典中,在则返回True,否则返回False

例如:

student={'小萌':'1001','小明':'1002'};
print('小萌在字典中:','小萌' in student);
print('小强在字典中:','小强' in student);

6.items()

用于返回可遍历的(键,值)元组数组

具体用法:dict.items()

例如:

student={'小萌':'1001','小明':'1002'};
print('调用items方法的结果:%s'%student.items());

7.keys()

以列表返回一个字典所有键

具体操作为:dict.keys()

例如:

student={'小萌':'1001','小明':'1002'};
print('字典student中所有键为:%s'%student.keys());

8.values()

与上面对应,以列表返回一个字典中的所有值

具体操作为:dict.values()

例如:

student={'小萌':'1001','小明':'1002'};
print('字典student中所有值为:%s'%student.values());

9.setdefault()

与上面get()类似,用于获得与给定键相关联的值。如果不存在,就会添加键,并设为默认值,get()就没有这个功能

具体操作为:dict.setdefault(key,default=None)

例如:

student={'小萌':'1001','小明':'1002'};
print('原学生信息为:',student);
print('小萌的学号为:%s'%student.setdefault('小萌'));
print('小强的学号为:%s'%student.setdefault('小强'));
print('新学生信息为:',student);

10.update()

用于吧字典dict2的键/值对更新到dict里,

具体操作为:dict.update(dict2)

例如:

student1={'小萌':'1001','小明':'1002'};
student2={'小强':'1004'};
print('原字典student1为:',student1);
student1.update(student2);
print('新字典stude1为:',student1);

就是函数有点多,感觉不看书,还是有点不牢,至于思想感觉还是很简单,几乎不用动脑筋。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值