基础数据类型(三)

3、字典Dict

  字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组。

  字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

3.1、增加

dic= {'name': 'jin', 'age': 18, 'sex': 'male'}

#1、通过键名key进行添加
dic['weight'] = '65'    
print(dic)              #{'name': 'jin', 'age': 18, 'sex': 'male', 'weight': '65'}

#2、字典中有同名key则不执行操作,没有才会添加
dic.setdefault('age',21)
print(dic)              #{'name': 'jin', 'age': 18, 'sex': 'male', 'weight': '65'}

dic.setdefault('hobby','rabbit')
print(dic)              #{'name': 'jin', 'age': 18, 'sex': 'male', 'name2': '依米', 'hobby': 'rabbit'}

#注意:如果不给值则默认值设为None
dic.setdefault('hobby')
print(dic)              #{'name': 'jin', 'age': 18, 'sex': 'male', 'weight': '65', 'hobby': None}

3.2、删除

#1、pop(key) 按key删除,有返回值
dic = {'name': 'jin', 'age': 18, 'sex': 'male','high': 175}
#注意:如果删除一个不存在的键则会报错
dic.pop('high1')      #KeyError: 'high1'
retval = dic.pop('high')
print(retval)           #175
print(dic)              #{'name': 'jin', 'age': 18, 'sex': 'male'}

#2、del dic[key] 删除键值对
dic = {'name': 'jin', 'age': 18, 'sex': 'male','high': 175}
del dic['age']
print(dic)              #{'name': 'jin', 'sex': 'male', 'high': 175}
#从内存中删除整个字典
del dic
print(dic)              #报错:name 'dic' is not defined

#3、clear() 清空字典
dic = {'name': 'jin', 'age': 18, 'sex': 'male','high': 175}
dic.clear()
print(dic)              #{}

#4、popitem() 随机删除字典中的某个键值对,将删除的键值对以元祖的形式返回
dic = {'name': 'jin', 'age': 18, 'sex': 'male','high': 175}
retval = dic.popitem()
print(retval)           #('high', 175)
print(dic)              #{'name': 'jin', 'age': 18, 'sex': 'male'}

3.3、修改

dic = {'name': 'jin', 'age': 18, 'sex': 'male'}
#1、 dic['key'] = value 有key就覆盖
dic['age'] = 21
print(dic)          #{'name': 'jin', 'age': 21, 'sex': 'male'}

#2、dic2.update(dic) 将dic的键值对会覆盖添加到dic2中,dic保持不变
dic = {'name': 'jin', 'age': 18, 'sex': 'male'}
dic2 = {'name': 'alex', 'weight': 75}    
dic2.update(dic)
print(dic)          #{'name': 'jin', 'age': 18, 'sex': 'male'}
print(dic2)         #{'name': 'jin', 'weight': 75, 'age': 18, 'sex': 'male'}

3.4、查询  

dic = {'name': 'jin', 'age': 18, 'sex': 'male'}

#1、通过键名key查询
print(dic['name'])          #jin
#注意:如果没有找到要查询的key则会报错
# print(dic['name2'])       #KeyError: 'name2'

#2、通过get(key) 查询
print(dic.get('name'))          #jin
#不会报错,会输出一个None
print(dic.get('name2'))         #None
#没有找到,会输出用户提示的信息
print(dic.get('name2','没有此键值对'))    #没有此键值对

#3、通过for循环进行遍历查询
#(1) 遍历所有的键名(key)
for k in dic:
    print(k, end=' ')       #name age sex

print("\n")
for k in dic.keys():
    print(k, end=' ')       #name age sex

#(2) 遍历所有的键值(value)
print("\n")
for v in dic.values():
    print(v, end=' ')       #jin 18 male

#(3) 遍历所有的键值对(key,value)
print("\n")
for k,v in dic.items():
    print(k,v, end=' ')         #name jin age 18 sex male

print("\n")
for k in dic:
    print(k,dic[k], end=' ')    #name jin age 18 sex male

3.5、字典的嵌套

dic = {
    'name':'hello',
    'name_list':[1,2,3],
    1:{
        'years':['2017','2019'],
       'py':{'name':'python3','age':5}
    }
}

#1、[1,2,3]追加'wusir'
dic['name_list'].append('wusir')
print(dic['name_list'])     
#输出结果:[1, 2, 3, 'wusir']

#2、['2017','2019'] 在2017、2019中间插入一个2018
dic[1]['years'].insert(1,'2018')
print(dic[1]['years'])      
#输出结果:['2017', '2018', '2019']

#3、{'name':'python3','age':5} 添加一个键值对,hobby:code
dic[1]['py']['hobby'] = 'code'
print(dic[1]['py'])         
#输出结果:{'name': 'python3', 'age': 5, 'hobby': 'code'}

 数据类型总结:

# 可变与不可变:
    # 不可变数据类型: int、str、bool、元组tuple
    # 可变数据类型: 列表list、字典dict、集合set

 

posted @ 2018-01-25 16:44  lioushell  阅读(122)  评论(0编辑  收藏  举报