python基础5-字典

2019-12-18  本文已影响0人  乱弹琴给

什么是字典
字典(Dictionary)是Python中的内置数据结构
字典非常适合表达结构化数据

{
   '姓名':'汪峰','性别':'男'
    '绩效评级':'A','工资':'1000'
 }

字典的特点
采用键(KEY):值(VALUE)形式表达数据
KEY不允许重复。
可以运行时修改,动态调整存储空间。
创建字典的两种方式
使用{}创建字典

dict1 = {} #空的字典
print(type(dict1))
dict2 = {'name':'汪峰' , 'sex':'男' , 'hiredate':'1997-10-20' ,
              'grade':'A' , 'job':'销售' , 'salary':1000 ,
              'welfare':100 
                }

使用dict函数创建字典
dict3 = dict(name='汪峰',sex='男'。。。。。)
dict4 = dict.fromkeys(['name' , 'sex' , 'hiredate' , 'grade'])
print(dict4)
{'name': None, 'sex':None ,'hiredate':None ,'grade':None}
如果写成
dict4 = dict.fromkeys(['name' , 'sex' , 'hiredate' , 'grade':'N/A'])
print(dict4)
默认值None会变成N/A

字典的取值操作
employee = {'name':'汪峰' , 'sex':'男' , 'hiredate':'1997-10-20' ,
'grade':'A' , 'job':'销售' , 'salary':1000 ,
'welfare':100
}
#字典的取值1
name = employee['name']
#字典的取值2
name = employee.get('name')
print(employee.get('dept' , '其他部门')) 如果没有字典中没有dept这个KEY,用get 可以使用设定的默认值‘其他部门’

 #in 成员运算符
    print('name' in employee)    #TRUE
    print('dept' in employee)     #FALSE
# 遍历字典1
    for key in employee:
    v = employee[key]
    print(v)
 #遍历字典2
        for k,v in employee:
            print(k,v)
    //会打印出所有键值对

字典的更新操作

employee = {'name':'汪峰' , 'sex':'男' , 'hiredate':'1997-10-20' ,
              'grade':'A' , 'job':'销售' , 'salary':1000 ,
              'welfare':100 
                }

对单个KV进行更新

employee['grade'] = 'B'

对多个KV进行更新

employee.update(salary = 1200,welfare = 150)

字典的新增操作与更新操作完全相同,有则更新,无则新增的原则。

employee['dept'] = '研发部'
employee.update(dept='财务部')

字典的删除操作

#1,pop 删除指定kv
employee.pop('dept')
#2,popitem 删除最后一个kv
kv = employee.popitem()
#3,clear 清空字典
employee.clear()

字典的常用操作

# 1,setdefault为字典设置默认值,如果某个KEY已经存在则忽略默认值,如果不存在则设置
emp1 = {'name':'jack' , 'grade':''B}
emp2 = {'name':'lily' }
emp2.setdefault('grade' ,'C')  //比下面代码效率高
# if 'grade' not in emp2
#         emp2['grade'] = 'C'

#2,获取字典的视图
    #(1)KEYS 代表获取所有的键
           ks = emp1.keys()   
            print(ks)   //返回一个视图   dict_keys(['name','grade'])
    #(2)    values 代表获取所有的值
            vs= emp1.values()
            print(vs)   //返回一个视图   dict_values
    # (3)items    代表获取所有的键值对
            its = emp1.items()
            print(its)   //返回一个视图   dict_items
  视图会随着emp1原始数据的变化而动态变化。

 # 3,利用字典格式化字符串
    #老版本的字符串格式化
        emp_str = "姓名:%(name)s,评级:%(grade)s,入职时间:%(hiredate)                s"  %emp1
     #新版本
        emp_str1 = "姓名:{name}, 评级:{grade}, 入职时间:{hiredate}".format_map(emp1)

# 散列值(HASH)
    h1 = hash(“abc”)
    print(h1)
    hash散列值,接近唯一ID值
    特点1,被hash的值有一点变化,生成的hash值就完全不同。
            2,在同一次运行中,被hash的值相同,生成hash值就一定相同。
            3,每运行一次,hash值就会重新生成一次。

#字典的存储原理
    把KEY进行哈希运算,生成一个的哈希值作为内存地址,在这个地址中存储VALUE
    效率高,建议结构化数据使用。
    比如,name,   hash(name) = 837181093 。 837181093这个内存中存储 “张三    

#字典在项目中的应用
    #两个独立系统之间进行数据传输,比如人力资源系统和财务系统,通过格式化的字            符串导入解析。
    员工数据.TXT        7782,CLARK, MANAGER, SALES 5000$
                                7934,    MILLER, SALESMAN, SALES, 3000$
                                7369,    SMITH, ANALYST, RESEARCH, 2000
                                每一组用$分割
    # 处理员工数据
        source = "7782,CLARK, MANAGER, SALES 5000$7934,    MILLER,                              SALESMAN, SALES, 3000$7369,    SMITH, ANALYST, RESEARCH, 2000"
        employee_list = source.split("$")
         print(employee_list)
       #保存所有解析后的员工信息,key是员工编号,value是包含完整员工信息的字典
            all_emp = {}
            for i in range(0,len(employee_list))    //range函数    range(start, stop[,                                                   step])    创建一个整数列表,一般用在 for 循环中。
                 e = employee_list[i].split(",")
                #创建员工字典
                 employee = {"no" : e[0], "name" : e[1], "job":e[2], "department" : e[3], "salary" : e[4]}
                   all_emp[employee['no']] = employee

             #生成的数据形式{'7782' : {'no':'7782','name':'clark','job':'manager','department':'sales','salary':5000}, '7934'.........}
       //这样可以通过get员工编号取得这个员工全部信息   
        empno = input("请输入员工编号:")
        emp = all_emp.get(empno)
        print("工号:{no},姓名:{name},岗位:{job},部门:{deparment},工资:{salary}".format_map(emp))
上一篇下一篇

猜你喜欢

热点阅读