字典

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

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

# 字典
'''
    基础数据类型之一,{} 以键值对的形式存储数据。
    dic = {'name':'Laonanhai',
            'age':45,
            'name_list':['反面教材','俊俊',....]
            }
    以key:value形式,映射,存储的大量的关系型数据。
    数据类型的分类:
        可变(不可哈希hash):list,dict,set, list = [11,222,333]
        不可变(可哈希hash):str,tuple,int,bool   name = 'alex'
        容器类:
            容器类的数据类型:list,tuple,dict, l1 = [11,True,'alex',[22,33,44]]
            非容器类的数据类型:str,int,bool。 s1 = '[11,22,33]'
    字典的key必须是不可变的数据类型,是唯一的,
        hash算法:
            字典的键通过hash表转换成数字,采用二分查找查询数字。
    字典的value可以是任意数据类型。
    字典的查询速度非常快,存储的大量的关系型数据。
    字典在python3.5包含3.5之前都是无序,但3.6之后是有序的。
'''
键是唯一的,不可变得   字典的value(值)可以是任意数据类型
dic={'name':'laonanhai','age':45}
print(dic)
键必须是不可变,可哈希类型
dic={'name':'aaa',[1,2,3]:'values'}#列表可变,不能作为键
dic={'name':'aaa',(1,2,3):'values'}#元祖,字符串,int可作为键
print(dic)
dic={'name':'bbb','age':45,'hobby':'women'}
增
dic['sex']='男'
dic['name']='aaa'#没有增加,有的话覆盖。
print(dic)
dic.setdefault('sex','男')
dic.setdefault('name','aaa')#没有的话就添加,有的话不变
print(dic)

删
print(dic.pop('age'))#有返回值,返回键对应的值
print(dic.pop('age1','没有此值'))#删除元素时,在后面加个参数,可以避免找不到而报错。

dic.clear() #清空字典
print(dic)

print(dic.popitem())#随机删除,有返回值,以元祖的形式返回删除键值对,默认删除最后一个。
print(dic)

del
1.删除整个字典
del dic
print(dic)
2.按照键删除键值对
del dic['name']
print(dic)

改
dic['name']='alex'#有则覆盖,没有就添加
update 两个字典的更新
dic={'name':'jin','age':18,'sex':'nale'}
dic2={'name':'aaa','weight':70}
dic2.update(dic)#有则覆盖,没有就添加  将dic里面的所有键值对 覆盖添加到dic2中,dic不变
print(dic)#{'name': 'jin', 'sex': 'nale', 'age': 18}
print(dic2)#{'weight': 70, 'name': 'jin', 'age': 18, 'sex': 'nale'}

查{'weight': 70, 'name': 'jin', 'age': 18, 'sex': 'nale'}
dic['name']
print(dic['name1'])#没有报错
print(dic.get('name'))
print(dic.get('name1'))#默认没有返回None
print(dic.get('name1','没有此值'))#可以配置参数

for 循环查询
dic.keys(), dic.values(), dic.items()#类似于list,但不是list
print(dic.keys(),type(dic.keys()))
print(dic.values(),type(dic.values()))

for  key in dic.keys():
    print(key)
l_key=list(dic.keys())
print(l_key)

for value in dic.values():
    print(value)
l_value=list(dic.values())
print(l_value)
分别赋值概念
a, b = 1, 2
a, b = ('alex', '34')
a, b = ['alex', '34']

有 如下 a = 1 b = 3,用一行代码将a b值互换。#面试题
a=1
b=3
a,b=b,a
print(a,b)
print(dic.items(),type(dic.items()))
for i in dic.items():
    print(i)

for k,v in dic.items():#[('name', 'laonanhai'), ('hobby', 'women'), ('age', 45)]
    print(k,v)
print(k,v)的结果:
name laonanhai
hobby women
age 45

for k,v in dic.items():
    print(k,type(k),v,type(v))#键是不可变得,值是任意数据类型

字典的嵌套
dic = {
    'name_list': ['碗蓉', '俊俊', '爽妹'],
    'status': None,
    'personal_msg': {
        'name': '反面教材',
        'age': 25,
        'hobby_list': ['抽烟', '喝酒', '烫头'],
    }
}

1,给dic添加一个键值对,学校:郑州大学
dic['学校']='郑州大学'#有的话覆盖,没有添加
print(dic)
dic.setdefault('学校','郑州大学')#没有的话添加,有的话不变
print(dic)
2,将status对应的值改成True
dic['status']=True
print(dic)
3,给name_list对应的列表追加一个元素:平平
dic['name_list'].append('平平')
dic['name_list'].insert(-1,'平平')#insert,插入,不能插到最后一个
print(dic)
4,给personal_msg对应的字典添加一个键值对sex:男
dic['personal_msg']['sex']='男'
print(dic)

5,将hobby_list 对应的列表中的烫头改成唱歌。
dic['personal_msg']['hobby_list'][2]='唱歌'
print(dic)

for循环:用户按照顺序循环可迭代对象的内容。

 

msg = '郑州大学'
for item in msg:
    print(item)

li = ['女神','aaa','猴子']
for i in li:
    print(i)

dic = {'name':'猴子','age':18,'sex':'man'}
for k,v in dic.items():
    print(k,v)

enumerate:枚举,对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值。

 

li = ['aaa','张三','女神']
for i in enumerate(li):
    print(i)
for index,name in enumerate(li,1):
    print(index,name)
for index, name in enumerate(li, 100):  # 起始位置默认是0,可更改
    print(index, name)

range:指定范围,生成指定数字。

 

for i in range(1,10):
    print(i)

for i in range(1,10,2):  # 步长
    print(i)

for i in range(10,1,-2): # 反向步长
    print(i)