Python基本数据类型(三)
七、字典(dict)
1、字典的簡單介紹
字典(dict)是Python中唯?的?個映射類型.他是以{ }括起來的鍵值對組成. 在dict中key是
唯?的. 在保存的時候, 根據key來計算出?個內存地址. 然后將key-value保存在這個地址中.
這種算法被稱為hash算法, 所以, 切記, 在dict中存儲的key-value中的key’必須是可hash的。
可hash的數據類型:int,str,bool,tuple
不可hash的數據類型:list,dict,set
語法:{key: value, key2: value2 …}
注意: key必須是可哈希(不可變類型)的. value沒有要求.可以保存任意類型的數據
# 以下為正確字典格式 dic = {1: 123, "name": "oldniu", False: True, (1, 2, 3): (11, 22, 33)} print(dic[1]) print(dic["name"]) print(dic[False]) print(dic[(1, 2, 3)])# 以下是不正確的字典格式 dic = {[1, 2]: "我咋就不合法呢"} # TypeError: unhashable type: 'list' dic = {{"name": "dogfa"}: "兄嘚我也是不合法的"} # TypeError: unhashable type: 'dict' dic = {{"age", "hobby"}: "想不到吧,我也是不合法的"} # TypeError: unhashable type: 'set'注意:dict保存的數據不是按照我們添加進去的順序保存的. 是按照hash表的順序保存的. ?hash表
不是連續的. 所以不能進?切片?作. 它只能通過key來獲取dict中的數據
2、字典的其它相關操作
增
-------------------------------------------------------------------- 注:如果你對python感興趣,我這有個學習Python基地,里面有很多學習資料,感興趣的+Q群:895817687 -------------------------------------------------------------------- dic = {"age": 18} dic["name"] = "李白" print(dic) # {"name": "李白", "age": 18} dic["age"] = 20 print(dic) # {"name": "李白", "age": 20} # 如果key不存在,則是執行添加操作,如果key存在,則是執行修改操作dic = {"age": 18} print(dic.setdefault("name", "杜甫")) # 杜甫 print(dic) # {"age": 18, "name": "杜甫"} print(dic.setdefault("age", 20)) # 18 print(dic) # {"age": 18, "name": "杜甫"} # setdefault()的第一個參數為key,第二個參數為value。如果key不存在,則執行添加操作并返回對應的value,如果key存在,則執行查詢操作返回字典中對應的key的刪
dic = {"name": "Jack Ma", "age": 38, "gender": "man"} print(dic.pop("name")) # Jack Ma print(dic) # {"age": 38, "gender": "man"} # 因為dict在存儲時不是連續的,所以pop在刪除時不能指定索引,須指定key進行刪除并會返回當前值。dic = {"name": "Jack Ma", "age": 38, "gender": "man"} del dic["name"] print(dic) # {"age": 38, "gender": "man"}dic.popitem() # 隨機刪除 dic.clear() # 清空字典改
dic = {"name": "Jack Ma", "age": 38, "gender": "man"} print(dic.pop("name")) # Jack Ma print(dic) # {"age": 38, "gender": "man"} # 因為dict在存儲時不是連續的,所以pop在刪除時不能指定索引,須指定key進行刪除并會返回當前值。dic = {"name": "Jack Ma", "age": 38, "gender": "man"} del dic["name"] print(dic) # {"age": 38, "gender": "man"}dic.popitem() # 隨機刪除 dic.clear() # 清空字典改
dic1 = {"id": 1, "name": "馬云", "salary": 100000000} dic2 = {"age": 38, "name": "馬化騰"} dic1.update(dic2) # 將dict2中的內容更新值dict1中,如果key存在則覆蓋,key不存在則添加 print(dic1) # {'id': 1, 'name': '馬化騰', 'salary': 100000000, 'age': 38} print(dic2) # {'age': 38, 'name': '馬化騰'}查
dic = {"id": 1, "name": "電視機", "price": 1000} print(dic["price"]) # 1000 print(dic["age"]) # 報錯 print(dic.get("name")) # 電視機 print(dic.get("age")) # None print(dic.get("age", 20)) # 20 # 當直接對字典通過key取值時,如果存在key,可以取出對應的值,如果不存在key,則會報錯。所以建議使用get()方法,當key不存在時,它會返回一個None,你也可以在下一個參數指定key不存在時的返回值。print(dic.setdefault("name")) # 電視機其它相關操作
dic = {"id": 1, "fruit": "apple", "price": 10} print(dic.keys()) # dict_keys(['id', 'fruit', 'price']) for key in dic.keys():print(key)print(dic.values()) # dict_values([1, 'apple', 10]) for value in dic.values():print(value) # dic.keys()和dic.values()得到的值和列表很像,但是不是列表,但可以當做列表來進行for循環使用。for i in dic:print(i,dic[i]) # id 1 ==> # fruit apple# price 10 # 當對字典進行for循環時,得到的元素是key。print(dic.items()) # dict_items([('id', 1), ('fruit', 'apple'), ('price', 10)]) for k,v in dic.items():print(k,v) # id 1 ==> # fruit apple# price 10 # dic.items()得到的是類似列表里面嵌套元祖的格式,對dic.items()進行for循環時,得到了里面的元祖。 # 由于 a, b = (1, 2)可以推出 k, v = ("id", 1),所以k,v 分別對應字典中的key和value。字典的嵌套
dic = {"id": 9527,"name": "周星星","age": 40,"movies": ["功夫", "少林足球", "算死草", "逃學威龍"],"partner": {"name": "逼王達","age": 45,"children": ["老大", "老二", "老三"]},"desc": "別人笑我太瘋癲,我笑他人看不穿" }# 獲取"別人笑我太瘋癲,我笑他人看不穿" print(dic["desc"])# 獲取周星星的合作伙伴名字 print(dic.get("partner").get("name"))# 獲取“逃學威龍” print(dic.get("movies")[3])# 獲取逼王達的第二個孩子名字 print(dic.get("partner").get("children")[1])字典中的fromkeys()(注意)
dic = dict.fromkeys(["dogfa", "oldniu"], (1, 2)) print(dic) # {"dogfa": (1, 2), "oldniu": (1, 2)} # fromkeys()用于重新生成一個新的字典,第一個參數中的每一項都會作為新的字典的key,第二個參數作為value。dic = dict.fromkeys(["dogfa", "oldniu"], [1, 2]) dic.get("dogfa").append(3) print(dic) # {"dogfa": [1, 2, 3], "oldniu": [1, 2, 3]}八、集合(set)
set集合是python的?個基本數據類型. ?般不是很常?. set中的元素是不重復的.?序的.?
?的元素必須是可hash的(int, str, tuple,bool), 我們可以這樣認為, set就是dict類型的數據但
是不保存value, 只保存key. set也?{}表?。
注意:set中的元素必須是可hash的,但是set本身不是可hash的,set是可變類型數據。
set = {1, "2", True, [1, 2]} # TypeError: unhashable type: 'list' set = {1, "2", True, {1: 2}} # TypeError: unhashable type: 'dict' set = {1, "2", True, {1, 2}} # TypeError: unhashable type: 'set'由于set中的元素是不重復的,無序的,所以我們可以利用這個特性對列表進行去重操作。
lst = ["哈哈哈", 1, "嘿嘿嘿", "哈哈哈", "dsb", True, 1] print(list(set(lst))) # [1, 'dsb', '嘿嘿嘿', '哈哈哈']set的相關操作
增
s = {1, 2, 3} s.add(4) print(s) # {1, 2, 3, 4}s = {1, 2, 3} s.update([4, 5, 6]) # 迭代更新 print(s) # {1, 2, 3, 4, 5, 6} # 已存在的元素將不會被添加進去刪
s = {1, 2, 3} s1 =s.pop() # 隨機刪除 print(s) # {2, 3} print(s1) # 1s = {1, 2, 3} s.remove(2) print(s) # {1, 3} # 對不存在的元素進行刪除時將會報錯s = {1, 2, 3} s.clear() print(s) # set() # 清空之后打印輸出的是set(),是為了和dict區分開改
# 由于集合是沒有索引,無序的,所以我們對幾個進行刪除時不能通過索引的方式來刪除 # 修改方法1:首先通過remove()刪掉需要修改的的元素,然后add()添加新元素。 s = {1, 2, 3} # 將1改成10 s.remove(1) s.add(10) print(s) # {10, 2, 3}# 修改方法2:將集合通過list()轉換成列表,再通過對列表進行修改操作。查
for i in s:print(i)其它常用操作
# 求兩個集合中的交集 s1 = {"狗法", "oldniu", "djb"} s2 = {"狗法", "oldniu", "djb", "dsb"} print(s1.intersection(s2)) # {"狗法", "oldniu", "djb"} print(s1 & s2) # {"狗法", "oldniu", "djb"}# 求兩個集合中的并集 s1 = {"狗法", "oldniu", "djb"} s2 = {"狗法", "oldniu", "djb", "dsb"} print(s1.union(s2)) # {"狗法", "oldniu", "djb", "dsb"} print(s1 | s2) # {"狗法", "oldniu", "djb", "dsb"}總結
以上是生活随笔為你收集整理的Python基本数据类型(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python基本数据类型(二)
- 下一篇: websocket python爬虫_p