一,什么是字典:所有数据都是成对出现 用大括号进行包裹
{
'姓名':'哈哈','性别':'女'
'绩效平级':'A','岗位':'销售'
}
特点:
a,字典采用 键(key):值(value) 形式表达数据
b,字典中key不允许出现重复,value允许重复
c,是可修改的,运行时动态调整存储空间
二,如果创建字典
使用{}来创建字典
使用dict函数创建字典
示例:
#使用{}创建
dict1 = {} #创建空的字典
print(type(dict1))
dict2 = {'name':'小王',
'age':'18',
'sex':'男',
'job':'销售'
}
print(dict2)
#使用dict函数创建字典
dict3 = dict(name='小王',age='18',sex='男',job='销售')
print(dict3)
#利用一个序列创建一个key
dict4 = dict.fromkeys(['name','age','sex','job'],'N')
print(dict4)
三,字典的取值操作:
#字典的取值操作
dict = {'name':'小王',
'age':'18',
'sex':'男',
'job':'销售'
}
name = dict['name']
print(name) #返回 小王
# get()函数
age = dict.get('age')
print(age)
print(dict.get('dd')) #返回None Key值不存在
print(dict.get('dd','其他部门')) #可为不存在的key 赋予默认值
# in 成员运算符
print('name' not in dict) #字典里是否存在 name
遍历字典:
#遍历字典
#方法一:
for key in dict:
v = dict[key]
print(v)
#方法二:
for key,val in dict.items():#返回字典中每一个键值对
print(key,val)
四,字典的更新和删除操作:
建议在编辑器里运行后查看输出结果
dict = {'name':'小王',
'age':'18',
'sex':'男',
'job':'销售'
}
print(dict)
dict['age'] = '25' #对单个key value 进行更新
print(dict)
#update() 一次对多个key value 进行更新
dict.update(age = '69',job = '运营')
print(dict)
#字典的更新操作和 新增操作相同(有则更新 无则新增)
dict.update(grade = 'A++')
print(dict)
#字典的删除操作
#pop()删除指定的kv 日常开发中常用操作
dict.pop('sex')
print(dict)
# popitem() 删除最后一个kv
k = dict.popitem()
print(k)
print(dict)
#clear() 清空字典 清除所有的数据
dict.clear()
print(dict)
五,字典的常用操作:
1,为字典设置默认值
利用 setdefault() 为字典设置默认值,如果某个key已经存在则忽略,不存在则设置默认值
emp1 = {'name':'jack','grade':'B'}
emp2 = {'name':'lily'}
emp2.setdefault('grade','C')
print(emp2)
运行结果:
2,获取字典的视图:
a,keys()代表获取所有的键
b,values()代表获获取所有的值
c,items()代表获取所有的键值对
k = emp1.keys()
print(k)
v = emp1.values()
print(v)
its = emp1.items()
print(its)
运行结果:
3,字符串格式化的使用技巧:
emp_str = "姓名:%(name)s,评级:%(grade)s" %emp1 #将emp1字典中的数据自动带入 emp_str中
print(emp_str)
#Python3中提供的新的书写方式
emp_str1 = "姓名:{name},评级:{grade}".format_map(emp1)
print(emp_str1)
运行结果:
示例:已知 字典 dict0 = {'name':'小王','age':'18','sex':'女','dept':'技术部'}
循环输出打印结果为:
代码:
dict01 = {'name':'小王','age':'18','sex':'女','dept':'技术部'}
for key,val in dict01.items():
print("{}:{}".format(key,val))
六,散列值(Hash)与字典的存储原理
字典也称之为 “哈希(Hash)” ,对应 “散列值”
散列值是从任何一种数据中创建数字“指纹”
#生成某一个数据的散列值
#对于相同的数据 无论生成多少次 hash值 都是相同的
#对于正数的hash值就是它自己
#生成某一个数据的散列值
#对于相同的数据 无论生成多少次 hash值 都是相同的
#对于正数的hash值就是它自己
a = hash('dcb')
print(a)
b = hash('abc') #与 dcb 生成的hash值完全不同
print(b)
c = hash(123456) #对于正数的hash值就是它自己
print(c)
字典的存储原理
将所有的key 进行转换成对应的散列值(hash) 根据散列值 会在内存中开辟一段空间,(会预留下多个空闲的空间),将hash值经过换算后 找到相应的内存地址,将数据保存在对应的内存地址中;
数据在内存中是分散的存储,根据hash的散列值来进行
数据在内存中储存 并不是按照key的顺序排列的
对于字典的数据提取速度是极快的,(每一个key在内存中保存具体的散列值,而这个散列值都对应唯一的内存地址)提取数据时效率比存在列表高很多,结构化数据建议将字典作为优先的存储结果使用
如下图: