1. 程式人生 > >python入門14 字典dict

python入門14 字典dict

字典dict是無序的key:value格式的資料序列

 

#coding:utf-8
#/usr/bin/python
"""
2018-11-11
dinghanhua
字典
"""

'''dict 無序的key:value組合
key要是不可變型別,如數字、字串、元組
key不可重複,重複的會被最後一個覆蓋
'''
dict_id = {'1':'python','2':'java','3':'javascript','4':'go','2':'JAVA'}
print(dict_id)
'''查詢、新增、修改、刪除資料,長度len()'''
print('dict包含的鍵值對個數:
',len(dict_id)) print('取值dict[key]',dict_id['1'])#查詢 print('取值dict.get(key,default)',dict_id.get('1','no key'),dict_id.get('11','no key')) #存在key取value,不存在取預設值 print('是否存在key','2' in dict_id) # key in dict #print('key不存在,報keyerror錯誤:',dict_id['6']) dict_id['2'] = 'java2' #更新資料 print(dict_id) dict_id[
'5'] = 'php' #新增資料 print(dict_id) del dict_id['5'] #刪除資料 print(dict_id) dict_id['5'] = 'test' print(dict_id) popele = dict_id.pop('5') print('popele=%s,dict is %s'%(popele,dict_id))
'''檢視所有的key,value'''
for k in dict_id:
    print(k,end=' ')
    print(dict_id[k])

#只取keys
print(dict_id.keys())
#只取values print(dict_id.values()) #取key,value print(dict_id.items()) for k,v in dict_id.items(): print(k,v)
'''用序列list、tuple、set生成dict的key'''
li = ['dog','cat','dinosaur']
dict_li = {}
dict_li = dict_li.fromkeys(li)
print(dict_li)

ss = {'dog','cat','pig'}
dict_li2 = dict_li.fromkeys(ss,'1') #第二個引數是預設的value值
print(dict_li2)

'''dict合併'''
dict_li.update(dict_li2)  # dict2的新增到dict1中
print(dict_li)
'''排序 sorted'''
print('排序:',sorted(dict_id)) #預設按鍵排序
li = sorted(dict_id.values()) #values排序
print(li)

li = sorted(dict_id.items()) #key,value預設按key排序
print(li)

li = sorted(dict_id.items(),key=lambda item:item[1]) #按value排序
print(li)

 

'''練習:將cookie字串改成dict'''
cookie = '_ga=GA1.2.1595072447.1537137596; _gid=GA1.2.1806558744.1541837860; ' \
         'Hm_lvt_3eec0b7da6548cf07db3bc477ea905ee=1541250960,1541292056,1541837859,1541861084; ' \
         'Hm_lpvt_3eec0b7da6548cf07db3bc477ea905ee=1541900415'
dict_cookie = {}
cookies = cookie.split(';')
for c in cookies:
    cl = c.split('=')
    dict_cookie[cl[0]] = cl[1]
print(dict_cookie)
'''練習:測試報告字串格式化'''
template = """
    <html>
        <head>
            <title>%(title)s</title>
        </head>
    <body>
        <h1>%(head)s</h1>
        <p>%(para1)s</p>
    </body>
    </html>
"""
dict_report = {'title':'testreport','head':'xx專案測試報告','para1':'該測試報告包含以下幾部分。。。'}
print(template%dict_report)
'''練習:去除dict的value重複項,保留其中一個'''
cookie = {'_ga': 'GA1.2.1595072447.1537137596', ' _gid': 'GA1.2.1806558744.1541837860', ' Hm_lvt_3eec0b7da6548cf07db3bc477ea905ee': '1541250960,1541292056,1541837859,1541861084', ' _gid2': 'GA1.2.1806558744.1541837860', ' Hm_lpvt_3eec0b7da6548cf07db3bc477ea905ee': '1541900415'}

# 定義一個新的字典,如果value不在新的dict.values裡,則插入
dict_new = {}
for key,value in cookie.items():
    if value not in dict_new.values():
        dict_new[key] = value
print('替換後:',dict_new)

#利用dict的key自動去重
dict_new2 = {}
for key,value in cookie.items():
    dict_new2[value] = key
print('key和value對調之後已去重',dict_new2)
for key,value in dict_new2.items():
    dict_new2[value] = key
    dict_new2.pop(key)
print('再恢復key value對應關係',dict_new2)

# 取所有的values值,個數大於1,則刪除
dict_new = cookie.copy()
for key,value in cookie.items():
    if list(dict_new.values()).count(value) >1:
        del dict_new[key]
print(dict_new)
'''dict記錄了成績,計算平均分,最高分等'''
#只記錄了一科成績,算平均分,最高分的人
dic_data = {'aaa':70,'bbb':95,'ccc':95,'ddd':85}

li_score = dic_data.values()
print('平均分:',sum(li_score)/len(li_score)) #平均分

maxscore = max(dic_data.values()) #最高分
for key,value in dic_data.items():
    if value == maxscore:
        print('No1 is %s'%key)

#按分數排序,取第一個人名和最高分,不適合第一名有多個的
print(sorted(dic_data.items(),key = lambda x:x[1],reverse=True)[0])

#記錄了3個科目的成績,計算每個人的平均分,找到均分不及格的人;每個科目的平均分和最高分,每科的第一名
dic_data = {'aaa':[60,60,50],'bbb':[90,60,80],'ccc':[90,95,98],'ddd':[88,85,97]}
#計算每個人的平均分,value的平均分
for key,value in dic_data.items():
    avg = sum(value)/len(value)
    print('%s 的平均分是 %.2f'%(key,avg))
    if avg < 60:
        print('均分不及格')

#計算各科的平均分和最高分 取value[i]的均分和最高
avglist = []
maxlist = []
lendic = len(dic_data)
for i in range(0,3):
    li_score = [ value[i]  for value in dic_data.values()] #取出每個科目的所有人的成績列表
    avglist.append(sum(li_score)/lendic) #平均分
    maxlist.append(max(li_score)) #最高分
print('各科目平均分:',avglist)
print('各科目最高分:',maxlist)
print(list(zip(['語文','數學','英語'],avglist,maxlist)))

#找最高分的學生
for key,value in dic_data.items():
    for i in range(0,3):
        if value[i] == maxlist[i]:
            print('第%s個科目的最高分學生%s'%(i+1,key))

#排序
for i in range(0,3):
    print(sorted(dic_data.items(),key = lambda x:x[1][i],reverse=True)) #各科目成績倒序排
'''計算每個人的平均分; 科目的均分和最高分,及拿到最高分的人'''
dic_data = {'aaa':{'語文': 60, '數學': 60, '英語': 50},
            'bbb':{'語文': 90, '數學': 60, '英語': 80},
            'ccc':{'語文': 90, '數學': 95, '英語': 98},
            'ddd':{'語文': 88, '數學': 85, '英語': 97}}

#每個人的平均分
for key,value in dic_data.items():
    avgscore = sum(value.values())/len(value.values()) #平均分
    print('%s的平均分是%.2f'%(key,avgscore))
    if avgscore < 60:
        print('均分不及格')

#科目最高分,均分
dict_course = {'語文':None,'數學':None,'英語':None}
for key in dict_course:
    li_score = [ value[key] for value in dic_data.values()]
    print(key,li_score)
    print('%s平均分:%.2f'%(key,sum(li_score)/len(li_score)))
    print('%s最大值:%.2f'%(key,max(li_score)))
    #得分最高的
    for name,score in dic_data.items():
        if score[key] == max(li_score):
            print('科目%s得分最高的是%s'%(key,name))

 

the end!