【小甲鱼零基础入门学python】学习总结之字典

一、字典的创建和修改

>>> p=dict(((1,'one'),(2,'two'),(3,'Three'))) #用p=dict((()))创建
>>> p
{1: 'one', 2: 'two', 3: 'Three'}
>>> t=dict(([1,'一'],[2,'二'],[3,'三']))#用p=dict(([]))创建
>>> t
{1: '一', 2: '二', 3: '三'}
>>> t[1]="壹" #修改
>>> t
{1: '壹', 2: '二', 3: '三'} #添加
>>> t[4]='四'
>>> t
{1: '壹', 2: '二', 3: '三', 4: '四'}
>>> 
>>> d=dict(芳芳='高中二年级',哈瑞='小学六年级',cc='小学一年级',艾米尼='幼儿园小班') #用d=dict(a=b)创建,注意,键是字符的话也不加引号
>>> d
{'芳芳': '高中二年级', '哈瑞': '小学六年级', 'cc': '小学一年级', '艾米尼': '幼儿园小班'}
>>> 
>>> p=dict(1='高中',2='初中',3='小学') *#用这种关键字的方法键不能是数字,我也不明白为什么???*
SyntaxError: expression cannot contain assignment, perhaps you meant "=="?

二、字典的遍历:

>>> for i in d.keys():   #遍历键
	print(i)
1
2
3
>>> for i in d.values():#遍历值
	print(i)
一
two
three
>>> for i in d.items():#遍历键值对
	print(i)	
(1, '一')
(2, 'two')
(3, 'three')
>>> 

三、方法
1.get()
描述
Python 字典 get() 函数返回指定键的值,如果值不在字典中返回默认值。
get()方法语法:
dict.get(key, default=None)
参数
key – 字典中要查找的键。
default – 如果指定键的值不存在时,返回该默认值。
get()方法用在文件统计字数中很实用,count=f.get(d[key],0)+1

>>> d=dict(([1,'one'],[2,'two'],[3,'three']))
>>> d
{1: 'one', 2: 'two', 3: 'three'}
>>> d.get(3,'Default')  #有key==3的键,所以返回其值。
'three'
>>> d.get(4,'Default')#无key==4的键,所以返回给定的默认值'Default'
'Default'
>>> 

2、fromkeys()
classmethod fromkeys(iterable[, value])
使用来自 iterable 的键创建一个新字典,并将键值设为 value。

fromkeys() 是一个返回新字典的类方法。 value 默认为 None。 所有值都只引用一个单独的实例,因此让 value 成为一个可变对象例如空列表通常是没有意义的。

>>> d={}
>>> d.fromkeys((1,2,3),'number')
{1: 'number', 2: 'number', 3: 'number'}
>>> d.fromkeys((1,2,3))
{1: None, 2: None, 3: None}
>>> d  #注意:fromkeys方法是新建一个字典,原字典不变。
{}
>>> d.fromkeys((1,2,3),('number1','number2','number3'))
{1: ('number1', 'number2', 'number3'), 2: ('number1', 'number2', 'number3'), 3: ('number1', 'number2', 'number3')}
>>> #fromkeys的value只能是一个值。



3.clear()清空

>>> d=dict(芳芳='高中二年级',哈瑞='小学六年级',cc='小学一年级',艾米尼='幼儿园小班')
>>> d
{'芳芳': '高中二年级', '哈瑞': '小学六年级', 'cc': '小学一年级', '艾米尼': '幼儿园小班'}
>>> p=d   #注意,通过赋值这种方式拷贝,它只是给a列表的地址新增加了一个叫做c的标签,也就是说a和c都指向的是同一个列表地址,所以即便c是你拷贝后的列表,当你对c进行操作时,a也会发生一模一样的变化。
>>> p
{'芳芳': '高中二年级', '哈瑞': '小学六年级', 'cc': '小学一年级', '艾米尼': '幼儿园小班'}
>>> d.clear()
>>> d
{}
>>> p
{}
>>> 
>>> id(d)
4328158784
>>> id(p)
4328158784
>>> 

注意:有人会用d={}的方法来清空,但其实这种清空并不彻底。

>>> d=dict(芳芳='高中二年级',哈瑞='小学六年级',cc='小学一年级',艾米尼='幼儿园小班')
>>> d
{'芳芳': '高中二年级', '哈瑞': '小学六年级', 'cc': '小学一年级', '艾米尼': '幼儿园小班'}
>>> p=d
>>> p
{'芳芳': '高中二年级', '哈瑞': '小学六年级', 'cc': '小学一年级', '艾米尼': '幼儿园小班'}
>>> d={}
>>> d
{}
>>> p  #可以看到p并没有清空,这是因为d={}方式是有新建了一个地址来存放d={}
{'芳芳': '高中二年级', '哈瑞': '小学六年级', 'cc': '小学一年级', '艾米尼': '幼儿园小班'}
>>> 
>>>> id(d)
4345148544
>>> id(p)
4345148480
>>> 

4.copy()
浅拷贝

>>> d=dict(芳芳='高中二年级',哈瑞='小学六年级',cc='小学一年级',艾米尼='幼儿园小班')
>>> c=d
>>> a=d.copy()
>>> c
{'芳芳': '高中二年级', '哈瑞': '小学六年级', 'cc': '小学一年级', '艾米尼': '幼儿园小班'}
>>> a
{'芳芳': '高中二年级', '哈瑞': '小学六年级', 'cc': '小学一年级', '艾米尼': '幼儿园小班'}
>>> d
{'芳芳': '高中二年级', '哈瑞': '小学六年级', 'cc': '小学一年级', '艾米尼': '幼儿园小班'}
>>> id(a)   #a=d.copy(),可以看出,通过d.copy()的a与原字典d的id不同,这是浅拷贝。具体也可见,我的另一篇专门总结赋值拷贝、浅拷贝、深拷贝的博文。
4342251072
>>> id(c)
4344997056  #c=d
>>> id(d)
4344997056    #可以看出,通过赋值拷贝的c与原字典d的id相同
>>> 

5.pop()与popitem()

pop(key[, default])
如果 key 存在于字典中则将其移除并返回其值,否则返回 default。 如果 default 未给出且 key 不存在于字典中,则会引发 KeyError。

popitem()
从字典中移除并返回一个 (键, 值) 对。 键值对会按 LIFO 的顺序被返回。

popitem() 适用于对字典进行消耗性的迭代,这在集合算法中经常被使用。 如果字典为空,调用 popitem() 将引发 KeyError。

在 3.7 版更改: 现在会确保采用 LIFO 顺序。 在之前的版本中,popitem() 会返回一个任意的键/值对。

>>> d.pop('芳芳')
'高中二年级'
>>> d
{'哈瑞': '小学六年级', 'cc': '小学一年级', '艾米尼': '幼儿园小班'}
>>> d.pop('小芳','大学')  #无‘小芳’这个键,所以返回默认的值'大学'
'大学'
>>> d.popitem()
('艾米尼', '幼儿园小班')
>>> d.popitem()
('cc', '小学一年级')
>>> 
  1. setdefault()
    setdefault(key[, default])¶
    如果字典存在键 key ,返回它的值。如果不存在,插入值为 default 的键 key ,并返回 default 。 default 默认为 None。
    注意:setdefault()与get()方法比较相似,但是最大的不同是,如果字典里面不存在键key,那么,setdefault()方法会给字典添加一个{key:default}的键值对,但是get()方法并不会改变原字典,而只是会返回一个default的值。
>>> d
{'哈瑞': '小学六年级', 'cc': '小学一年级', '艾米尼': '幼儿园小班', '小芳': '学前班'}
>>> d={'哈瑞': '小学六年级', 'cc': '小学一年级', '艾米尼': '幼儿园小班'}
>>> d.get('小芳','学前班')
'学前班'
>>> d       #原字典中没有键为小芳的键值对,用了get方法后,原字典并没有变
{'哈瑞': '小学六年级', 'cc': '小学一年级', '艾米尼': '幼儿园小班'}
>>> d.setdefault('小芳','学前班')
'学前班'
>>> d      #原字典中没有键为小芳的键值对,用了setdefault方法后,原字典添加上了新的键值对{'小芳': '学前班'}
{'哈瑞': '小学六年级', 'cc': '小学一年级', '艾米尼': '幼儿园小班', '小芳': '学前班'}
>>> 
  1. update()
    update([other])
    使用来自 other 的键/值对更新字典,覆盖原有的键。 返回 None。

update() 接受另一个字典对象,或者一个包含键/值对(以长度为二的元组或其他可迭代对象表示)的可迭代对象。 如果给出了关键字参数,则会以其所指定的键/值对更新字典: d.update(red=1, blue=2)。

可以通过update方法来添加、修改键值对:

>>> d
{'哈瑞': '小学六年级', 'cc': '小学一年级', '艾米尼': '幼儿园小班', '小芳': '学前班'}
>>> 
>>> dx={'哈瑞':'初中一年级','珂玛尼':'小学二年级'}
>>> d.update(dx) #修改哈瑞的值,添加珂玛尼键值对
>>> d
{'哈瑞': '初中一年级', 'cc': '小学一年级', '艾米尼': '幼儿园小班', '小芳': '学前班', '珂玛尼': '小学二年级'}
>>> d.update(爱奈斯='小学五年级',cc='小学二年级') #通过关键字的方法添加爱奈斯键值对,修改cc的值
>>> d
{'哈瑞': '初中一年级', 'cc': '小学二年级', '艾米尼': '幼儿园小班', '小芳': '学前班', '珂玛尼': '小学二年级', '爱奈斯': '小学五年级'}
>>> 

四、查找成员是否为键:

>>> d=dict(芳芳='高中二年级',哈瑞='小学六年级',cc='小学一年级',艾米尼='幼儿园小班')
>>> '芳芳'in d #注意,这里查找的是字典d的键
True
>>> '艾米尼'not in d
False
>>> 

注:本文有些内容参考以下网站:
https://docs.python.org/zh-cn/3.8/library/stdtypes.html?highlight=dict%20get#dict.get
https://www.runoob.com/python3/python3-basic-syntax.html

你可能感兴趣的:(python)