1.4、Python数据结构——字典(dict)

目录

1、定义字典

2、使用字典

2.1、访问字典,用键查找

2.2、修改字典

2.3、新增元素

2.4、删除元素

3、字典的其他操作

3.1、clear(),清空字典所有元素

3.2、copy(), 复制一份新副本

3.3、fromkeys(),创建一个新字典

3.4、get(),返回键对应的值,如果不存在对应的键则返回默认值

3.5、keys(),返回一个列表,里面包含了字典里的所有键

3.6、values(),返回一个列表,里面包含了字典的所有值

3.7、items(),返回一个列表,里面包含了字典里的所有键和值


1、定义字典

字典(dict)类型就和它的名字一样,可以像字典一样去查找,定义字典非常简单,例如:

trans={
    "this" :"这",
    "is"   :"是",
    "world":"世界",
}
print(trans,type(trans))
#执行结果为
{'this': '这', 'is': '是', 'world': '世界'} <class 'dict'>

字典的元素是成对出现的,每个元素都是由“:”和键值对(“:”左边的称为键或者Key,“:”右边的称为值或者Value)构成,元素和元素之间用“,”分隔,整个字典用花括号“{}”包围。

注意:字典的键必须是唯一的、不重复的。

如果是空字典(一个元素都没有),则可以直接使用“{}”表示。

2、使用字典

在Python中,字典就是一组键值对,字典元素都是成对出现的,每个元素必须要有键和对应的值,访问字典和查字典一样,需要用键去“查找”值。

2.1、访问字典,用键查找

trans={
    "this" :"这",
    "is"   :"是",
    "world":"世界",
}
print("world",trans["world"])
#执行结果为
world 世界

print("python",trans["python"])
#执行结果为
KeyError: 'python'

用类似列表索引的语法查找键对应的值,但是这种方法只能获取已经存在的键值对,如果尝试访问不存在的键,Python将会显示错误信息。

2.2、修改字典

字典和列表一样,都是一种可以修改的结构,修改的方式和列表类似。

trans={
    "this" :"这",
    "is"   :"是",
    "world":"世界",
}
print(trans)
trans["world"]="宇宙"
print(trans)
trans["是"]="are"  #不能改变dict中的值,此操作会另外增加键值对
print(trans)
#执行结果为
{'this': '这', 'is': '是', 'world': '世界'}
{'this': '这', 'is': '是', 'world': '宇宙'}
{'this': '这', 'is': '是', 'world': '宇宙', '是': 'are'}

 注意:只能利用通过键来修改值。

2.3、新增元素

字典新增元素和修改元素的语法是一样的

trans={ }
print(trans)
trans["world"]="世界"
print(trans)
#执行结果为
{}
{'world': '世界'}

2.4、删除元素

由于字典和列表一样都是可以被修改的类型,所以字典中的元素自然也能被删除

trans={
    "this" :"这",
    "is"   :"是",
    "world":"世界",
}
print(trans)
del trans["is"]
print(trans)
#执行结果为
{'this': '这', 'is': '是', 'world': '世界'}
{'this': '这', 'world': '世界'}

3、字典的其他操作

3.1、clear(),清空字典所有元素

trans={
    "this" :"这",
    "is"   :"是",
    "world":"世界",
}
print(trans)
trans.clear()
print(trans)
#执行结果为
{'this': '这', 'is': '是', 'world': '世界'}
{}

3.2、copy(), 复制一份新副本

字典和列表一样,如果只是复制的话则只是引用之前的内容,但如果做修改的话就会改变原先的字典内容。copy方法类似与列表的"[:]"语法,相当于完整地复制了一份新的副本。

trans1={
    "this" :"这",
    "is"   :"是",
    "world":"世界",
}
trans2=trans1
trans3=trans1.copy()
trans2["this"]=["这一个"]
print(trans2)
print(trans1)
trans3["world"]="宇宙"
print(trans3)
print(trans1)
#执行结果为
{'this': ['这一个'], 'is': '是', 'world': '世界'}   # trans2 赋值 引用trans1
{'this': ['这一个'], 'is': '是', 'world': '世界'}   # trans1
{'this': '这', 'is': '是', 'world': '宇宙'}         # trans3 对trans1无影响
{'this': ['这一个'], 'is': '是', 'world': '世界'}   # trans1

从执行结果我们可以发现,使用copy方法对获取到的字典做修改,原始的字典不受影响。

需注意:copy进行的拷贝是浅拷贝,就是说,如果字典的元素也是字典,那么copy只会影响最外层字典,元素内部还是引用。可以用深拷贝来解决此类问题。

3.3、fromkeys(),创建一个新字典

用序列中的元素作为字典的键,第二个参数为字典所有参数对应的初始值。

seq={"name","class","age"}
student1=dict.fromkeys(seq)
print("不指定默认值的student1:",student1)
student2=dict.fromkeys(seq,18)
print("指定默认值的student2:",student2)

#执行结果为
不指定默认值的student1: {'class': None, 'age': None, 'name': None}
指定默认值的student2: {'class': 18, 'age': 18, 'name': 18}

3.4、get(),返回键对应的值,如果不存在对应的键则返回默认值

trans1={
    "this" :"这",
    "is"   :"是",
    "world":"世界",
}
print(trans1.get("this"))
print(trans1.get("class"))
#执行结果为
这
None

3.5、keys(),返回一个列表,里面包含了字典里的所有键

trans1={
    "this" :"这",
    "is"   :"是",
    "world":"世界",
}
print(trans1.keys())
#执行结果为
dict_keys(['this', 'is', 'world'])

keys方法常常用来判断一个键是否存在于字典中,可以于“in”操作符组合使用,例如:

trans1={
    "this" :"这",
    "is"   :"是",
    "world":"世界",
}
print("是否存在world?","world" in trans1.keys())
print("是否存在class?","class" in trans1.keys())
#执行结果为
是否存在world? True
是否存在class? False

3.6、values(),返回一个列表,里面包含了字典的所有值

trans1={
    "this" :"这",
    "is"   :"是",
    "world":"世界",
}
print(trans1.values())
#执行结果为
dict_values(['这', '是', '世界'])

3.7、items(),返回一个列表,里面包含了字典里的所有键和值

准确的说items返回的并不是一个list类型,只是类似list。

trans1={
    "this" :"这",
    "is"   :"是",
    "world":"世界",
}
print(trans1.items())
#执行结果为
dict_items([('this', '这'), ('is', '是'), ('world', '世界')])

 注意:字典不能直接应用于for循环中。我们可以用items方法来遍历字典,例如:

trans1={
    "this" :"这",
    "is"   :"是",
    "world":"世界",
}
for k,v in trans1.items():
    print(k,"=>",v)        # print前要有空格,否则报错,一般为一个tab键空格
#执行结果为
this => 这
is => 是
world => 世界

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值