一、字典定義
字典是另一種可變容器模型,且可存儲任意類型對象。字典的每個鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括號({})中。鍵必須唯一,值則不必;值可以取任何數據類型,但鍵必須是不可變數據類型,如:字符串,整型,元組。字典查詢效率高,內部使用key來計算一個內存地址(hash)
二、字典操作
1. 添加
# 創建空字典
dict_test = {}
dict_test = dict()
dict_test["language"] = "Chinese"
>>> dict_test
{'language': 'Chinese'}
# setdefualt() - 默認:None
dict_test.setdefault("age")
>>>{'language': 'Chinese', 'age': None}
dict_test.setdefault("name", "WeChat")
>>>{'language': 'Chinese', 'age': None, 'name': 'WeChat'}
2. 修改
dict_test = {'language': 'Chinese', 'age': None, 'name': 'WeChat'}
dict_test["age"] = 18
>>>{'language': 'Chinese', 'age': 18, 'name': 'WeChat'}
# update() - 相當於合並兩個dict
dict_one = {"name":"tree", "age":100, "height":"90M"}
dict_two = {"name":"tree", "color":"green"}
dict_one.update(dict_two)
>>>dict_one
{'name': 'tree', 'age': 100, 'height': '90M', 'color': 'green'}
3. 查詢
dict_test = {'language': 'Chinese', 'age': 10, 'name': 'WeChat'}
(1) 直接key取 - 當key不存在時,KeyError
dict_test["age1"]
(2) get() 方法
dict_test.get("name")
dict_test.get("name_new") ->沒有key,返回None
dict_test.get("name_new", "不存在") ->沒有key,指定返回值
(3) setdefault()
-新增:先看看有沒有key,有就返回其值;沒有,執行新增
dict_test.setdefault("name", "QQ")
>>>name在dict_test中則返回對應的值,不在則返回QQ
4. 刪除
dict_test = {'language': 'Chinese', 'age': 10, 'name': 'WeChat'}
(1) dict_test.pop("age") ->pop指定key刪,有返回值
>>>{'language': 'Chinese', 'name': 'WeChat'}
(2) dict_test.popitem() ->隨機刪除
(3) del dict_test["name"]
(4) dict_test.clear() ->清空
三、字典方法
1. items()
# 這個類型就是dict_items類型,可迭代的
item = dic.items()
print(item,type(item))
>>>dict_items([('name', 'jin'), ('sex', 'male'), ('age', 18)]) <class 'dict_items'>
2. keys()
keys = dic.keys()
print(keys,type(keys))
>>>dict_keys(['sex', 'age', 'name']) <class 'dict_keys'>
3. values()
values = dic.values()
print(values,type(values))
>>>dict_values(['male', 18, 'jin']) <class 'dict_values'> 同上
4. 迭代
1. 默認循環字典鍵key
for key in dic:
print(key)
2. 循環字典鍵key
for key in dic.keys():
print(key)
3. 循環字典中的值
for value in dic.values():
print(value)
4. 循環字典中的鍵值對
for key, value in dic.items( ):
print(key, value)
len() 計算鍵值對的個數
四、字典循環刪除
1. 刪除數字小於100的人
dic = {'alex':100, 'wusir':20000, 'jack':12, 'tony':1, 'ketty': 3000}
# 先創建一個新列表存儲要刪的人
li = []
# 循環字典中的鍵值對
for key, value in dic.items():
# 小於100的人添加進列表
if value < 100:
li.append(key)
# 循環列表中的元素,刪除字典中的鍵
for el in li:
del dic[el]
print(dic)
結果:
{'alex': 100, 'wusir': 20000, 'ketty': 3000}
五、fromkeys()
1. 不是改變字典,是一個類方法,作用是創建新字典
dic = {}
dic_new = dic.fromkeys("abc", "hello")
print(dic) # {}
print(dic_new) # {'a': 'hello', 'b': 'hello', 'c': 'hello'}
2. 新字典是通過第一個參數的迭代和第二個參數組成鍵值對創建新字典。fromkeys( )正常來說是類名來訪問的
dic1 = dic.fromkeys(['a', 'b'], [])
dic1['a'].append('alex')
# key使用的同一值
>>>{'a':['alex'], 'b':['alex']}
1、 不允許同一個鍵出現兩次。創建時如果同一個鍵被賦值兩次,后一個值會被記住
2、 鍵必須不可變,所以可以用數字,字符串或元組充當,而用列表就不行
3、不可變數據(不可hash)(3 個):Number(數字)、String(字符串)、Tuple(元組);
4、可變數據(可hash)(3 個):List(列表)、Dictionary(字典)、Set(集合)。
六、實例
有如下值li= [11,22,33,44,55,66,77,88,99,90],將所有大於 66 的值保存至字典的第一個key中,將小於 66 的值保存至第二個key的值中。即: {'k1': 大於66的所有值列表, 'k2': 小於66的所有值列表}
1. 方法一
li= [11,22,33,44,55,66,77,88,99,90]
result = {}
for el in li:
if el < 66:
# setdefault可以幫我們執行新增, 如果key存在了就不新增了
# {'key1':[11,22]}
result.setdefault("key1", []).append(el)
else:
result.setdefault("key2", []).append(el)
2. 方法二
li= [11,22,33,44,55,66,77,88,99,90]
result = {}
for el in li:
if el < 66: # 11, 22
if result.get("key1") == None:
result["key1"] = [el] # 11
else:
result['key1'].append(el)
else:
if result.get("key2") == None:
result["key2"] = [el] # 11
else:
result['key2'].append(el)