1. 程式人生 > >day 05

day 05

字典:

1、列表如果儲存大量資料,查詢速度相對慢一些

2、列表儲存的資料,一般沒有什麼關聯性 

針對以上原因,python提供了一個基礎資料型別,dict 字典

資料型別的分類 : 

  容器型資料型別:list, tupel,dict,set

  非容器型資料型別: str , bool , int

  

  可變(不可雜湊)的資料型別: list, dict,set

  不可變(可雜湊)的資料型別:str  , int, bool, tuple

{‘name’:‘alex’} 以鍵值對形式儲存的資料型別

  1、 字典的鍵必須是不可變的資料型別,唯一的,不重複。  重複則後面的覆蓋之前的

    字典的值可以是任何資料型別(物件)

  2、字典的查詢速度非常快

  3、字典在python3.5之前是無序的,單是3.6優化機制,字典會按照建立字典之處的資料排列

  4、字典可以儲存大量的關聯性資料

複製程式碼
 # 字典巢狀字典列表
dic = {'name': 'alex','python':['biilgas','春哥', '二師兄'],    
            '太白':{
                'name':'太白金星',
                'id': 1306546743423,
                'phone': 1358225xxxx,
                'sex': '男'
                }
        }
複製程式碼

2、字典的增刪改查

增:   有則覆蓋,無則新增

dic['keys'] = ' value '

dic = {'name': 'barry', 'age': 18, 'sex': 'man'}
dic['high'] = 179
print(dic)           #  {'name': 'barry', 'age': 18, 'sex': 'man', 'high': 179}      #有則覆蓋,無則新增
dic['name'] = 'chencp' 
print(dic)       #{'name': 'chencp', 'age': 18, 'sex': 'man', 'high': 179}       #有則覆蓋
,無則新增

setdefault 有則不變,無則新增

dic.setdefault('KEYS', 'value')  如果不填value,則為None

dic = {'name': 'barry', 'age': 18, 'sex': 'man'}
dic.setdefault('high')     
print(dic)             #{'name': 'barry', 'age': 18, 'sex': 'man', 'high': None}
dic.setdefault('name', 'chencp') 
print(dic)             #{'name': 'barry', 'age': 18, 'sex': 'man', 'high': None}

 

刪:

1、pop 通過鍵刪除對應值

dic.pop('key')      dic.pop(' key' , ' 沒有這個鍵 ‘)   如果沒有健,可以自定義返回值     *****

dic = {'name': 'chencp', 'age': 18, 'sex': 'man'}
dic.pop('name1', '沒有該鍵') # 沒有鍵則返回自定義的值 print(dic.pop('name1', '沒有該鍵') # 沒有改鍵
)
print(dic) # {'name': 'chencp', 'age': 18, 'sex': 'man'}

2、clear   清空字典的鍵值對,保留字典ID

dic = {'name': 'barry', 'age': 18, 'sex': 'man'}
dic.clear()
print(dic)     #   {}

3、popitem 刪除最後一個鍵值對  (3.5及以前版本,是隨機刪除。因為3.5之前版本字典是無序)

dic = {'name': 'barry', 'age': 18, 'sex': 'man'}
dic.popitem()   # 3.5之前是隨機刪除,3.6刪除最後一個鍵值對  3.5之後Python優化了  字典變成有序的
print(dic)          # {'name': 'barry', 'age': 18}

4、del

dic = {'name': 'barry', 'age': 18, 'sex': 'man'}
del dic     #  刪除整個字典id
一次只能刪除一個鍵,沒有則報錯。還是用pop好一點
dic = {'name': 'barry', 'age': 18, 'sex': 'man'}
del dic['name1']     # 一次只能刪除一個鍵,沒有則報錯。還是用pop好一點
print(dic)

改:

dic[' key '] = ' value '       覆蓋原有的key的value

dic = {'name': 'barry', 'age': 18}
dic['age'] = 14
print(dic)     # {'name': 'barry', 'age': 14}
dic['age', 'name'] = 14, 'alex'
print(dic)     # {'name': 'barry', 'age': 14, ('age', 'name'): (14, 'alex')}  把兩個鍵當一個元組,組合成一個鍵

update  有兩種方式:

1、 把dic1  update到 dic2

dic1 = {"name": "jin", "age": 18, "sex":"male"}
dic2 = {"name": "alex","weight": 75}
dic2.update(dic1)  #  將dic1字典中的鍵值對覆蓋新增到dic2中,dic1不變。
print(dic1)        # {'name': 'jin', 'age': 18, 'sex': 'male'}
print(dic2)        # {'name': 'jin', 'weight': 75, 'age': 18, 'sex': 'male'}

2、dic.update(weight=145, high=182)

dic1 = {"name": "jin", "age": 18}
dic1.update(weight=150, higi=178)  # key不在dic1中,則增加
print(dic1)              # {'name': 'jin', 'age': 18, 'weight': 150, 'higi': 178}
dic1.update(name=150)    # key在dic1中,則修改
print(dic1)             # {'name': 150, 'age': 18, 'weight': 150, 'higi': 178}

查:

1、按照鍵查對應的值
print(dic['name'])
print(dic['name1']) # 沒有此鍵會報錯

2、用gat查 ,不會報錯 *********
dic = {"name": "jin", "age": 18}
ret = dic.get('age')        # 列印 18
ret = dic.get('age1')       # 列印None
ret = dic.get('age1','沒有此鍵')    #列印 '沒有此鍵'
print(ret)

3、直接迴圈字典,獲取所有key

for i in dic:
    print(i)

4、 dic.keys() ,   dic.values()   dic.item()   ***

複製程式碼
dic = {"name": "jin", "age": 18}
# dic.keys() dic.values() dic.items()
# 上面三個都是返回一個類似於列表的容器的特殊資料型別。
print(dic.keys())
for key in dic.keys():
    print(key)

print(dic.values())
for value in dic.values():
    print(value)

print(dic.items())
for item in dic.items():
    print(item)
複製程式碼

dic = {"name": "jin", "age": 18} for k, v in dic.items(): print(k, v) # 便利,key和value, 可只打印k或v

 

字典的巢狀

複製程式碼
dic = {
    'l1': ['alex', '太白'],
    'id': 3,
    1: {
        'data': 20181225,
        'place': '深圳校區',
        'class': 'python3期',
        'name_list': ['小潘', 'jay', '春哥', 'xx'],
    }
}
# 1,給小列表['alex', '太白'] alex後面插入一個字串,'aaa'
dic['l1'].insert(1, 'aaa')
print(dic)
dic2  = {'l1':['alex','aaa', '太白']}
# dic.update(dic2)
# print(dic)

# 2,將id對應的3變成1. dic['id'] = 1 print(dic)
# 3,將 1 對應的字典的data變成20181224, dic[1]['data'] = 20181224 print(dic) dic[1]['data'] -= 1 print(dic)
# 4,將name_list對應的jay全部變成大寫。 dic[1]['name_list'][1] = dic[1]['name_list'][1].upper() print(dic)
# 4,將name_list對應的 xx 刪除。 dic[1]['name_list'].pop() dic[1]['name_list'].remove('xx') del dic[1]['name_list'][-1] print(dic)
複製程式碼

 

格式化輸出:

# 通過字典的方式
dic = {'name': '太白', 'sex': '男', 'age': 18}
msg = '我叫%(name)s,今年%(age)s,性別%(sex)s' % dic
print(msg)

 

fromkeys(iterable,value)            返回一個新的字典,其中鍵來自iterable,值等於值

複製程式碼
dic = {'name': 'alex'}
dic = dict.fromkeys('abc', '春哥')        #{'a': '春哥', 'b': '春哥', 'c': '春哥'}
dic = dict.fromkeys([1, 2, 3],'春哥')       # {1: '春哥', 2: '春哥', 3: '春哥'}
# 坑:值如果是可變的資料型別,那麼所有的值都是一個記憶體地址
dic = dict.fromkeys([1, 2, 3], ['alex'])       #{1: ['alex'], 2: ['alex'], 3: ['alex']}
dic[1].append(666)                          #{1: ['alex', 666], 2: ['alex', 666], 3: ['alex', 666]}
print(dic)
複製程式碼