鱼C论坛

 找回密码
 立即注册
查看: 2735|回复: 3

[学习笔记] python 字典

[复制链接]
发表于 2018-3-28 09:08:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、字典和字符串等的区别

字典是映射类型,不是序列类型

字符串/元组/列表都是序列类型

用中括号标识的是列表

用小括号或者逗号标识的是元组

用大括号表示的是字典

二、字典的组成:

1、字典由多个键和对应的值组成

2、通过键可以访问对应的值

三、常用的创建字典的方法

1、dict1 = {'1':'11','2':'22','3':'33','4':'44'}   

2、通过dict()工厂函数来创建,调用则生成一个字典的实例

dict3 = dict(传入一一对应的元组或者列表)

dict3 = dict((('1','11'),('2','22')))

dict4 = dict((['1','11'],['2','22']))

3、通过关键字key == value来创建

dict5 = dict(a = 'aa',b = 'bb')

4、直接给字典里面的键赋值

如果是原本存在的则会进行修改:dict['1'] ='111'

如果是原本不存在的则会新增:dict['3']='333'


四、内建方法:

fromkeys(...):通过fromkeys去创建并返回一个新的字典,不能使用fromkeys方法去修改

两个参数:S-->字典的键值;V-->对于的值,不提供则默认为none

dict6 = {}
dict6 = dict6.fromkeys((1,2,3))
print(dict6)
dict6 = dict6.fromkeys((1,2,3),'value')
print(dict6)

{1: None, 2: None, 3: None}

{1: 'value', 2: 'value', 3: 'value'}

dict6 = dict6.fromkeys((1,2,3),('value1','value2','value3'))

不能分别给每一个key赋不同的值,使用fromkey方法来创建的所有key都是相同的值

{1: ('value1', 'value2', 'value3'), 2: ('value1', 'value2', 'value3'), 3: ('value1', 'value2', 'value3')}

2、访问字典的方法:(keys(),values(),items())

keys():返回字典键的引用

dict1 = dict.fromkeys(range(3),'ok')
print(dict1)
for eachkey in dict1.keys():
    print(eachkey)
for eachValue in dict1.values():
    print(eachValue)
for eachItem in dict1.items():
    print(eachItem)

{0: 'ok', 1: 'ok', 2: 'ok'}
0
1
2
ok
ok
ok
(0, 'ok')
(1, 'ok')
(2, 'ok')


3、使用get()方法可以更加友好的处理越界信息

print(dict1.get(3))

None

print(dict1[3])

KeyError: 3

4、通过成员资格操作符来判断一个键是否在字典中

in

not in

print(2 in dict1)
print(3 in dict1)

True

False

在字典中检查键的成员资格比序列更高效,当数据比较多时,两者的差距相当明显

在字典中检查的是键而不是值,而序列中查找的是元素的值而不是元素的索引号

5、清空字典则使用clear()方法:

dict1.clear()

就清空了

a = {'姓名':'小甲鱼'}
b = a
a.clear()
print(a)
print(b)

{}
{}

使用dict1 = { }不能完全清空

a = {'姓名':'小甲鱼'}
b = a
a = {}
print(a)
print(b)

{}

{'姓名': '小甲鱼'}---B仍能访问,不够安全

6、copy()圈拷贝字典

赋值和全拷贝的区别:

a = {1:'one',2:'two',3:'three'}
b = a.copy()#双胞胎,不同的卵子
c = a#双胞胎,同一个卵子
print(a,id(a))
print(b,id(b))
print(c,id(c))

如果a修改则c也会跟着修改,c修改则a也会修改,但是b不会受到干扰

{1: 'one', 2: 'two', 3: 'three'} 39270664
{1: 'one', 2: 'two', 3: 'three'} 39270792

{1: 'one', 2: 'two', 3: 'three'} 39270664



7、pop()和popitem()的区别

字典是无序的

pop删除指定的key和value

a = {1:'one',2:'two',3:'three'}
a.pop(2)
print(a)

{1: 'one', 3: 'three'}

popitem随机删除key和value

a = {1:'one',2:'two',3:'three'}
a.popitem()
print(a)

{2: 'two', 3: 'three'}

8、setdefault()

a = {1:'one',2:'two',3:'three'}
a.setdefault(4)
print(a)

{1: 'one', 2: 'two', 3: 'three', 4: None}

a = {1:'one',2:'two',3:'three'}
a.setdefault(5,'hha')
print(a)

{1: 'one', 2: 'two', 3: 'three', 5: 'hha'}

9、update()利用字典或者映射关系去更新另一个字典

a = {1:'11'}
b = {2:'22'}
a.update(b)
print(a)
print(b)



{1: '11', 2: '22'}
{2: '22'}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-3-29 08:47:50 | 显示全部楼层
6、copy()圈拷贝字典

赋值和全拷贝的区别:

a = {1:'one',2:'two',3:'three'}
b = a.copy()#双胞胎,不同的卵子
c = a#双胞胎,同一个卵子
print(a,id(a))
print(b,id(b))
print(c,id(c))

如果a修改则c也会跟着修改,c修改则a也会修改,但是b不会受到干扰

{1: 'one', 2: 'two', 3: 'three'} 39270664
{1: 'one', 2: 'two', 3: 'three'} 39270792

{1: 'one', 2: 'two', 3: 'three'} 39270664

不是很懂   如果a修改则c也会跟着修改,c修改则a也会修改  这句什么意思,我试了下给a重新赋值,c的值是不会变的,不是很明白这个修改指的是什么形式的修改
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-29 09:06:03 | 显示全部楼层
yunying12321 发表于 2018-3-29 08:47
6、copy()圈拷贝字典

赋值和全拷贝的区别:

a = {1:'one',2:'two',3:'three'}
b = a.copy()#双胞胎,不同的卵子
c = a#双胞胎,同一个卵子
a[1] = 'onechange'
print('a的值为:',a)
print('b的值为:',b)
print('c的值为:',c)

修改了a 之后,b的值不变但是c的值变了
a的值为: {1: 'onechange', 2: 'two', 3: 'three'}
b的值为: {1: 'one', 2: 'two', 3: 'three'}
c的值为: {1: 'onechange', 2: 'two', 3: 'three'}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-30 07:56:57 | 显示全部楼层
yespython 发表于 2018-3-29 09:06
a = {1:'one',2:'two',3:'three'}
b = a.copy()#双胞胎,不同的卵子
c = a#双胞胎,同一个卵子

谢谢~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-14 18:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表