1.字典
字典能准确的存储数据。
特征:大括号括起来,可以存放多个元素,元素之间用逗号隔开,元素为K : V键值对形式。
K > Key : 对v的描述信息,一般为字符串。
V > Value:真正的数据,相当于变量的值,可以是任意类型。
键是唯一的,如果重名,键会绑定给后面的值。
k必须是不可变类型 ( eg:整数,浮点数,字符串。 ) ,value可以是任意类型
字典是无序的,Python2中
> > > dict1 = { 'k1' : 'v1' , 'k2' : 'v2' }
> > > dict1
{ 'k2' : 'v2' , 'k1' : 'v1' }
2.定义字典
2.1普通定义
dic1 = {
'name1' : 'monkey' ,
1 : 'cat' ,
2.0 : 'tiger'
}
print ( type ( dic1) )
print ( dic1[ 'name1' ] )
print ( dic1[ 1 ] )
print ( dic1[ 2.0 ] )
dic2 = { 'k1' : 'v1' , 'k1' : 'v2' }
print ( dic2)
2.2其他方式
dic2 = dict ( k1= 'v1' , k2= 'v2' , k3= 'v3' )
print ( dic2)
list1 = [ [ 'k1' , 'v1' ] , [ 'k2' , 'v2' ] , [ 'k3' , 'v3' ] ]
d = { }
for k, v in list1:
d[ k] = v
print ( d)
dic = dict ( [ ( 'k1' , 'v1' ) , ( 'k2' , 'v2' ) ] )
print ( dic)
d = { }
for i in list1:
d[ i[ 0 ] ] = i[ 1 ]
print ( d)
2.3 快速生成字典
dict . formkeys ( '键元素' , '值元素' )
x = [ 'a' , 'b' , 'c' ]
list_1 = dict . fromkeys( x, 1 )
print ( list_1)
x = [ 'a' , 'b' , 'c' ]
list_1 = dict . fromkeys( x, [ ] )
print ( list_1)
list_1[ 'a' ] = 1
print ( list_1)
x = [ 'a' , 'b' , 'c' ]
list_1 = dict . fromkeys( x, [ ] )
print ( list_1)
list_1[ 'a' ] . append( 1 )
print ( list_1)
3.查询字典
3.1查看字典
. keys ( ) 查看键
. values ( ) 查看值
. items ( ) 查看键值对
Python3 这些方法返回一个 'dict_keys' 视图对象。无法理解就直接看成是列表(需要list ( ) 转换)。
'dict_keys' 对象不支持索引。可以使用for遍历取值。
Python2 则是真正的列表 .
dic1 = { 'name' : 'kid' , 'age' : 18 , 'hobby' : [ 'read' , 'eat' ] }
print ( dic1. keys( ) )
print ( dic1. values( ) )
print ( dic1. items( ) )
print ( type ( dic1. keys( ) ) )
dic2 = list ( dic1. keys( ) )
print ( dic2)
dic1 = { 'name' : 'kid' , 'age' : 18 , 'hobby' : [ 'read' , 'eat' ] }
print ( dic1. keys( ) )
print ( dic1. values( ) )
print ( dic1. items( ) )
"""
['hobby', 'age', 'name']
[['read', 'eat'], 18, 'kid']
[('hobby', ['read', 'eat']), ('age', 18), ('name', 'kid')]
"""
3.2.查询是否存在
. get ( ) 方法 通过字典key获取字典的value值。
. get ( '键名称' , '键不存在返回的信息' ) 有两种种返回的结果
情况 1 : 键存在返回值
情况 2 : 键不存在,返回提示信息,默认为None , 可以自定义返回指定的内容。
1.普通访问
访问不存在的键时,正常访问 直接报错。
dic1 = { 'name1' : 'monkey' , 'name2' : 'cat' , 'name3' : 'tiger' }
print ( dic1[ 'name1' ] )
print ( dic1[ 'age' ] )
2.get方法
推荐的查询使用 . get ( ) 方法。
就算自己的代码有问题也不能直接就报错。
dic1 = { 'name1' : 'monkey' , 'name2' : 'cat' , 'name3' : 'tiger' }
print ( dic1. get( 'age' ) )
print ( dic1. get( 'age' , '键不存在' ) )
3.3元素统计
len ( ) 统计字典中字典中键值对的个数。
dic1 = { 'k1' : 'v1' , 'k2' : 'v2' }
print ( len ( dic1) )
3.4成员运算
in 和 not in
判断某个值是否在某个群体中,返回值为布尔值。
字典中只默认提供key的访问,value不会暴露。
可是使用 . values ( ) 与 . items() 将value值展示。
dic = {
'name1' : 'monkey' ,
'name2' : 'cat' ,
'name3' : 'tiger'
}
print ( 'name1' in dic)
print ( 'aaa' not in dic)
print ( 'monkey' in dic)
print ( 'monkey' in dic. values( ) )
print ( 'monkey' in dic. items( ) )
print ( dic. values( ) )
print ( dic. items( ) )
"""
dict_values(['monkey', 'cat', 'tiger'])
dict_items([('name1', 'monkey'), ('name2', 'cat'), ('name3', 'tiger')])
"""
for items in dic. items( ) :
if 'monkey' in items:
print ( 'monkey' in items)
4.修改字典
4.1替换
. setdefault ( '键名' , '值' )
键值一起写,查询键对值不存在的会则新建 ;
值省略,只写键,不存在返回Noune,键存在获取到键对应的值。
dict_1 = { 'k1' : 'v1' , 'k2' : 'v2' , 'k3' : 'v3' }
dict_1. setdefault( 'k4' , 'v4' )
print ( dict_1)
print ( dict_1. setdefault( 'k4' ) )
print ( dict_1. setdefault( 'k5' , ) )
4.2更新
update ( ) 键不存在则新建,存在则修改。
dict ( 元素 1 , 元素 2 )
dict_1 = { 'k1' : 'v1' , 'k2' : 'v2' , 'k3' : 'v3' }
dict_1. update( { 'k4' : 'V4' } )
print ( dict_1)
dict_1. update( { 'k1' : '6' } )
print ( dict_1)
v1 = { "k1" : 1 , "k2" : 2 }
v2 = { "k2" : 22 , "k3" : 33 }
dic = dict ( v1, ** v2)
print ( dic)
v1 = { "k1" : 1 , "k2" : 2 }
v2 = { "k2" : 22 , "k3" : 33 }
v3 = v1 | v2
print ( v3)
用 update 更新字典 a,会有两种情况:
( 1 )有相同的键时:会使用最新的字典 b 中 该 key 对应的 value 值。
( 2 )有新的键时:会直接把字典 b 中的 key、value 加入到 a 中。
a = { 'k1' : 'v1' , 'k2' : 'v2' }
b = { 'k3' : 'v3' , 'k4' : 'v4' }
a. update( b)
print ( a)
5.删除元素
del 删除 指定元素
. pop ( ) 弹出元素,在字典中这个方法不提供索引。
. clear ( ) 清空字典。
. popitem ( ) 随机弹出一组键值。(看起来像是从末尾弹出,不要被迷惑了。)
为什么是“随机”,创建的字典是无序的,字典是怎样的顺序并不清楚。
dict1 = {
'name1' : 'monkey' ,
'name2' : 'cat' ,
'name3' : 'tiger'
}
del dict1[ 'name1' ]
print ( dict1)
dict1. pop( 'name2' )
print ( dict1)
dict1. clear( )
print ( dict1)
dic1 = { 'name' : 'kid' , 'age' : 18 , 'hobby' : [ 'read' , 'eat' ] }
print ( dic1. popitem( ) )
print ( dic1)
6.取值
for 循环 遍历字典。
for 遍历 视图对象 获取值。
在使用items ( ) 的时候,变量必须跟取的元素数量一致。
dic1 = { 'name' : 'kid' , 'age' : 18 , 'hobby' : [ 'read' , 'eat' ] }
for i in dic1. keys( ) :
print ( i, end= ' ' )
print ( )
for i in dic1. values( ) :
print ( i, end= ' ' )
print ( )
for k, v in dic1. items( ) :
print ( k, v, end= ' ' )
print ( )
for item in dic1. items( ) :
print ( item, end= ' ' )
print ( )
for x, y in dic1. items( ) :
print ( x, y, end= ' ' )
print ( )
name age hobby
kid 18 [ 'read' , 'eat' ]
name kid age 18 hobby [ 'read' , 'eat' ]
( 'name' , 'kid' ) ( 'age' , 18 ) ( 'hobby' , [ 'read' , 'eat' ] )
name kid age 18 hobby [ 'read' , 'eat' ]
7.练习
1. 统计字符的个数以字典的形式显示。
str = "asdfmaslsopdfjosdjfjsdfogjsdgsadjfaojfiajsdfoihaiwehrqowfjskdnfarwhfjkklnwaoiejfo;asfnasCmskdvn"
dic = { }
for i in str :
if i in dic:
dic[ i] += 1
else :
dic[ i] = 1
print ( dic)
l1 = [ 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 , 99 , 90 ]
dic1 = { 'k1' : [ ] }
dic2 = { 'k2' : [ ] }
for i in l1:
if i < 66 :
dic1[ 'k1' ] . append( i)
else :
dic2[ 'k2' ] . append( i)
print ( dic1)
print ( dic2)
s = 'hello word word xx hello xx xx'
list1 = s. split( )
dic = { }
print ( list1)
for i in list1:
if i not in dic:
dic[ i] = list1. count( i)
print ( dic)
4 . 简单购物车, 要求如下:
实现打印商品详细信息,用户输入商品名和购买个数,则将商品名,价格,
购买个数以列表形式{ '商品名' : [ 价格, 购买个数] , . . . } 数加入购物列表,
如果输入为空或其他非法输入则要求用户重新输入( 只能输入纯数字字符和字母q) , 按下q退出并打印购物列表.
shop_dic = {
'苹果' : 5.6 ,
'香蕉' : 4.8 ,
'西瓜' : 3.5 ,
'葡萄' : 8.9 ,
'桃子' : 5.0 ,
}
shop_dic = {
'苹果' : 5.6 ,
'香蕉' : 4.8 ,
'西瓜' : 3.5 ,
'葡萄' : 8.9 ,
'桃子' : 5.0 ,
}
for k, v in shop_dic. items( ) :
print ( f' { k} 价格 { v} ' )
shop_cat = { }
while True :
fruits = input ( '输入水果的名字>>>:' ) . strip( )
if fruits not in shop_dic:
print ( '输入的水果不存在!' )
else :
num = input ( '请输入购买的数量>>>:' ) . strip( )
if num. isdigit( ) :
if fruits in shop_cat:
shop_cat[ fruits] [ 1 ] += int ( num)
else :
list_msg = [ shop_dic[ fruits] , int ( num) ]
shop_cat[ fruits] = list_msg
else :
print ( '输入的数量格式不正确!' )
print ( shop_cat)
if input ( '按下q退出购物,否则继续>>>:' ) . strip( ) == 'q' :
break
5. 在我无法确定key是否存在的情况下,如何从字典中取值才能保持程序不会出错
6. 简述Python3中dict . keys ( ) 、dict . values ( ) 、dict . items ( ) 包含的内容及
与Python2的区别
7. 字典键不存在有几种方法创建一堆键值