python-字典方法(dict)知識整理

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# __author__:anxu.qi
# Date:2018/11/30

info = {
'stu1101': "TengLan Wu",
'stu1102': "LongZe Luola",
"stu1103": "XiaoZe Maliya",
}
############################ 字典 dict ##################################
key-value 鍵值對的數據的集合
可變的、無序的、key不重複

字典是無序的

字典的 key 是按照哈希來進行保存的,因此字典的key必定要能被哈希,被哈希就是不可變的。
 
      注:字典的key不能是:列表,字典
 
字典的value 能夠是任意值

# 字典的每個元素,都是鍵值對, 並且是無序的
user_info = {
"Kname":"Vsidaodeng",
"Kage":"V30",
"Kgender":"Vmiss"
}
## 索引
# print(user_info['age'])
# 30

## 切片沒有

自定定義:兩種方式均可以,推薦使用第一種

字典定義 dict 定義 初始化
  d = dict() 或者 d = {}
  dict(**kwargs) 使用 name=value 初始化一個字典
  dict(iterable,**kwarg) 使用可迭代對象和name=value對 來構造字典 。
  不過可迭代對象必須是一個二元結構。
    d = dict(((1,'a'),(2,'b')) 或者 d = dict(([1,'a'],[2,'b']))

 

 

 

 

 



####################################### 多級字典的嵌套示例 #############################################

# key 儘可能不要寫中文,由於有時候編碼不一致,取不出來值
av_catalog = {
"歐美":{
"www.youporn.com": ["不少免費的,世界最大的","質量通常"],
"www.pornhub.com": ["不少免費的,也很大","質量比yourporn高點"],
"letmedothistoyou.com": ["可能是自拍,高質量圖片不少","資源很少,更新慢"],
"x-art.com":["質量很高,真的很高","所有收費,屌比請繞過"]
},
"日韓":{
"tokyo-hot":["質量怎樣不清楚,我的已經不喜歡日韓範了","據說是收費的"]
},
"大陸":{
"1024":["所有免費,真好,好人一輩子平安","服務器在國外,慢"]
}
}
av_catalog["大陸"]["1024"][1] = "能夠再國內作鏡像"
print(av_catalog)

# 打印全部的值 values()
print(av_catalog.values())

# 打印全部的key keys()
print(av_catalog.keys())

# 字典是無序的,是沒有下標的,能夠根據key來獲取具體的值
#################### 字典 查 #################################
print(info)
# {'stu1103': 'XiaoZe Maliya', 'stu1102': 'LongZe Luola', 'stu1101': 'TengLan Wu'}
# 方式一:
print(info["stu1101"]) # info 存在則不會報錯,不存在就會報錯

# 方式二
print(info.get("stu110113")) # get 有就返回該值,沒有這個值就返回None
# None
# TengLan Wu

# 方式三: in
print("stu1103" in info) # 等與 python2.x info.has_key("stu1103")

#################### 字典 改 #################################
info["stu1101"] = "武藤蘭" # 存在直接替換
print(info)
# {'stu1102': 'LongZe Luola', 'stu1101': '武藤蘭', 'stu1103': 'XiaoZe Maliya'}

#################### 合併更新 update ####################################
a = {
'stu01':"nginx",
'stu02':"mysql",
'stu03':'zabbix'
}
b = {
'stu01':"tami",
1:3,
2:5
}
a.update(b)
print(a)
# {'stu03': 'zabbix', 'stu02': 'mysql', 2: 5, 'stu01': 'tami', 1: 3}
# 把b做爲一個參數傳爲了update,把兩個字典合併,若是a字典中有和b字典中相同的key,則覆蓋a中的value
# 若是沒有這個kye那麼,將b中的key和value都添加到a字典中

#################### 字典 增 ##################################

info["stu1104"] = "CangJingkong" # 不存在則建立一條
print(info)
# {'stu1104': 'CangJingkong', 'stu1102': 'LongZe Luola', 'stu1101': '武藤蘭', 'stu1103': 'XiaoZe Maliya'}

# 建立一個新的值 ,去字典裏能取到我就返回,若是取不到我就設置一個新的。
av_catalog.setdefault("TaiWan", {"www.baiddu.com":[1, 2]})


#################### 字典 刪 ##################################
# 方式一:
del info["stu1101"]
print(info)
# {'stu1104': 'CangJingkong', 'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'}
# 方式二:
info.pop("stu1102") # 刪除指定的元素,並能夠拿到結果
print(info)
# {'stu1103': 'XiaoZe Maliya', 'stu1104': 'CangJingkong'}
# 方式三: 隨機刪除一個元素,並能夠拿到結果
info.popitem()
print(info)
# {'stu1103': 'XiaoZe Maliya'}

c = {
'stu01': "tami",
1: 3,
2: 5
}

 

 

# 只能等遍歷時,收集好對應的key或者是value,再作處理

 

 
#####################  for 循環 #################
# 循環字典的key 和 value
# 注:如下方式一和方式二的區別:結果都是同樣的,可是方式一比方式二高效不少,
# 由於方式一隻是經過key,找到key和value,方式二是將字典轉換爲列表後,經過key,value找到對應的值
# 數據量不大還能夠,數據量大的狀況下很是佔用資源費時間。
# 方式一:
for i in a:
print(i,a[i])
# stu03 zabbix
# stu01 nginx
# stu02 mysql
# 方式二:
for k,v in a.items():
print(k,v)
# stu03 zabbix
# stu01 nginx
# stu02 mysql
########################  keys #######################
# 加上keys後,會輸出全部的key
for i in user_info.keys():
print(i)
"""
gender
name
age
"""
######################## values #######################
# 加上values後,會輸出全部的value
for i in user_info.values():
print(i)
"""
Vmiss
Vsidaodeng
V30
"""
######################## items #######################
# 加上items 後,會輸出全部的item
for k,v in user_info.items():
print(k,v)
"""
Kname Vsidaodeng
Kgender Vmiss
Kage V30
"""
##########################################################

user_info = {
"Kname":"Vsidaodeng",
"Kage":"V30",
"Kgender":"Vmiss"
}
# 獲取字典的全部的key
print(user_info.keys())
# dict_keys(['age', 'gender', 'name'])

# 獲取字典的全部的值
print(user_info.values())
# dict_values([30, 'M', 'sidaodeng'])

# 獲取字典全部的鍵值對
print(user_info.items())
# dict_items([('age', 30), ('name', 'sidaodeng'), ('gender', 'M')])


################################ del 刪除 ##################################################
# 刪除字典中的某個鍵值對
user_info = {
"Kname":"Vsidaodeng",
"Kage":"V30",
"Kgender":"Vmiss"
}
del user_info['Kage'] # 指定key,能夠直接進行刪除
print(user_info,11110000000)
# {'Kname': 'Vsidaodeng', 'Kgender': 'Vmiss'} 11110000000


############################### clear 清空字典 ##########################################
# def clear(self): # real signature unknown; restored from __doc__
# 清除全部內容
user_info = {
"Kname":"Vsidaodeng",
"Kage":"V30",
"Kgender":"Vmiss"
}
user_info.clear()
print(user_info)
# {} # 返回一個空字典


############################### copy 淺複製 ##########################################
# def copy(self): # real signature unknown; restored from __doc__
# 淺copy
舉例:
# ##################### 靜態方法:fromkeys #####################
# 初始化一個字典,並附一個臨時的值,和淺copy 相似,只copy一層。
d = dict.fromkeys([6,7,8]) #根據序列,建立字典

d = dict.fromkeys([6,7,8],[100])
注:若是後面是引用類型,那麼都是copy的門牌號

print(d)
# {8: None, 6: None, 7: None}

d = dict.fromkeys([6,7,8],"test")
print(d)
# {8: 'test', 6: 'test', 7: 'test'}
d = dict.fromkeys([6,7,8],[1,{"name":"alex"},444])
print(d)
# {8: [1, {'name': 'alex'}, 444], 6: [1, {'name': 'alex'}, 444], 7: [1, {'name': 'alex'}, 444]}
d[7][1]['name'] = "Jack wang"
print(d)
# {8: [1, {'name': 'Jack wang'}, 444], 6: [1, {'name': 'Jack wang'}, 444], 7: [1, {'name': 'Jack wang'}, 444]}
# ##################### get 方法 #####################
根據key獲取值,key不存在時,並制定默認值爲None
def get(self, *args, **kwargs): # real signature unknown
""" Return the value for key if key is in the dictionary, else default. """
pass

 


############################### get 獲取值 ##########################################
# def get(self, k, d=None): # real signature unknown; restored from __doc__
# 根據key獲取值,若是key不存在,能夠指定一個默認值。d是默認值
user_info = {
"Kname":"Vsidaodeng",
"Kage":"V30",
"Kgender":"Vmiss"
}
aa = user_info.get('Kname') # 若是有這個值,就會打印出來value值
print(aa)
# Vsidaodeng

aa = user_info.get('Knameadasfad') # 若是沒有這個kye,就會打印None,可是不會報錯
print(aa)
# None

# get 添加默認值
aa = user_info.get('Kage','123') # 若是存在這個key,就會將對應的value打印出來
print(aa,1111)
# V30 1111
aa = user_info.get('Kage111','123') # 若是沒有aeg111這個key,那麼就會給一個默認值123
print(aa)
# 123
注:get是獲取,不會改變原來的字典

# 經過索引也能夠取,若是沒有這個key,就會報錯
# 因此,推薦使用,get("key") 來獲取。

############################### in 是否存在 ##########################################
# 是檢查字典中否有對應的key
user_info = {
"Kname":"Vsidaodeng",
"Kage":"V30",
"Kgender":"Vmiss"
}
aaaa = 'Kname' in user_info.keys()
print(aaaa)
# True

aaaa = 'Kname1231' in user_info.keys()
print(aaaa)
# False


############################### iteritems ##########################################
# def iteritems(self): # real signature unknown; restored from __doc__
# 項可迭代
user_info = {
"Kname":"Vsidaodeng",
"Kage":"V30",
"Kgender":"Vmiss"
}
# 先不說,後期補充

############################### pop 移除 ##########################################
# def pop(self, k, d=None): # real signature unknown; restored from __doc__
# 獲取某個key,並在字典中移除掉
注:pop 出來的是一個value,不是k,v對。
user_info = {
"Kname":"Vsidaodeng",
"Kage":"V30",
"Kgender":"Vmiss"
}
bb = user_info.pop('Kage')
print(bb)
# V30
print(user_info)
# {'Kgender': 'Vmiss', 'Kname': 'Vsidaodeng'}

#
############################### popitem 隨機移除 ##########################################
# def popitem(self): # real signature unknown; restored from __doc__
返回一個二元組 ,
能夠使用 k,v = d.popitem

 


# 獲取並在字典中移除,隨機移除。
user_info = {
"Kname":"Vsidaodeng",
"Kage":"V30",
"Kgender":"Vmiss"
}
bbbb = user_info.popitem()
print(bbbb)
"""
('Kage', 'V30')
('Kgender', 'Vmiss')
('Kname', 'Vsidaodeng')
"""

############################### setdefault 設置值 ##########################################
# def setdefault(self, k, d=None): # real signature unknown; restored from __doc__
# 設置值,可是若是已經存在,則不設置,並獲取當前key對應的值
      若是不存在,會進行添加,並獲取已經添加的值
# 若是key不存在,則建立,若是存在,則返回已存在的值且不修改
user_info = {
"Kname":"Vsidaodeng",
"Kage":"V30",
"Kgender":"Vmiss"
}



############################### update 更新 ##########################################
# def update(self, E=None, **F): # known special case of dict.update
# 批量更新

 


# 已經存在的更新掉,不存在的則添加
方式二:
user_info = {
"Kname":"Vsidaodeng",
"Kage":"V30",
"Kgender":"Vmiss"
}

he = {
"a":1,
"b":2,
"c":3
}
user_info.update(he)
print(user_info)
# {'b': 2, 'Kgender': 'Vmiss', 'Kage': 'V30', 'a': 1, 'c': 3, 'Kname': 'Vsidaodeng'}
########################### update 添加 #############################################
he = {
"a":1,
"b":2,
"c":3
}

# 方式一:

he.update({"d":4})

print(he)

# {'b': 2, 'c': 3, 'd': 4, 'a': 1}

# 方式二:

he["e"]=5
# print(he)
# {'b': 2, 'c': 3, 'd': 4, 'a': 1}
舉例說明:
ttt = (11,22,["alex",{"k1":"v1"}])

ttt[2][1]["k2"] = "v2" # 方式一等同於下面的方式二
ttt[2][1].update({"k2":"v2"})      # 方式二

print(ttt)
# (11, 22, ['alex', {'k2': 'v2', 'k1': 'v1'}])
 

 字典dict 的key:
  set 集合 的元素就能夠看作key,set能夠看作dict的簡化版
  hashable 可哈希才能夠做爲key,能夠使用 hash() 測試
  key 不容許重複
  只要是將key用好了,就把字典用好了。

 

 

 

 

相關文章
相關標籤/搜索