Python高級數據類型-字典
- 1.字典的定義
- 2.字典的基本操作:查詢,增加,修改,獲取
- 3.字典的統計、合并、清空
- 4.字典的循環遍歷
- 5.返回最大“值”對應的“鍵”
- 6.應用場景
- pop(key)
- 7.集合
字典是除了列表之外最靈活的數據類型,用來描述一個物體的關鍵信息,比如描述一個人的特征,身高,體重,年齡,
1.字典的定義
字典: 用于存儲無序的數據類型,不關心數據保存的順序,用鍵來訪問保存的數據
列表: 用于存儲 有序 的數據類型,用索引訪問—有序
定義方式1–用{}+Key:value定義,鍵值對之間用逗號分隔。
#一個鍵值對占據一行,看起來比較清晰
xiaoming={"name": " xiaoming","age": 18,"gender": True,"height": 1.75,"weight": 65}
print(xiaoming)
定義方式1–dict()+元組
items = [('height', 180), ("weigh", 124)]
D = dict(items)
D2 = {'height': 180,'weigh': 124}
# 字典的遍歷
鍵用來獲取數據,最常用的鍵的類型是字符串,值用來保存數據,鍵應該是唯一的。
輸出: 輸出的順序和定義的順序一般不同,因為字典是一個無順序的數據類型
{‘gender’: True, ‘age’: 18, ‘name’: ’ xiaoming’, ‘weight’: 65, ‘height’: 1.75}
2.字典的基本操作:查詢,增加,修改,獲取
xiaoming_dict={“name”:“xiaoming”}
1.查詢:中括號+Key,指定的Key不存在時,程序會報錯(取值)
print (xiaoming_dict[“name”])
2.增加鍵值對,如果key存在會修改該值,如果不存在會新增一個鍵值對
xiaoming_dict[“age”]=18
3.修改變量值,格式增肌鍵值對相同
xiaoming_dict[“name”]=“xiaoxiaoming”
4.刪除指定鍵值對,key不對程序報錯
xiaoming_dict.pop(“name”)
print(xiaoming_dict)
刪除后輸出:{‘age’: 18}
5 獲取 鍵 對應的值,如果鍵不存在,則返回None,比第一種方法好用 (default用于指定鍵不存在時返回類型)
dict.get(key, default=None)
6.返回所有值
z={“a”:1, “b”:2}
print(z.values())
#輸出 [1, 2]
3.字典的統計、合并、清空
xiaoming_dict={“name”:“xiaoming”,“age”: 18}
1.統計鍵值對的數量,(輸出2)
print(len(xiaoming_dict))
2.合并字典
temp_dict={“height”: 1.75, “age”: 20}
xiaoming_dict.update(temp_dict)
輸出:{‘age’: 20, ‘name’: ‘xiaoming’, ‘height’: 1.75}
被合并的字典中已經包含存在的鍵值對,原有的會被覆蓋,如此例子中的name.
3.清空字典
xiaoming_dict.clear()
print(xiaoming_dict)
輸出:{}
4.字典的循環遍歷
xiaoming={"name": " xiaoming","qq": "123456","phone": "10086"}
#變量K是每一次循環中獲取到的鍵值對的Key
for k in xiaoming:print ("%s-%s"%(k,xiaoming[k]))
輸出:
qq-123456
phone-10086
name- xiaoming
5.返回最大“值”對應的“鍵”
counts={1: 1, 2: 1, 3: 1, 4: 2, 5: 4}
max(counts.keys(), key=counts.get)
key=counts.get 中的key 是max的參數,
counts.keys()獲取的是字典的所有值,獲取最大值之后,用get 返回最大的的鍵?
6.應用場景
字典一般與列表一起使用,定義多個字典,放在同一個列表變量中,循環遍歷列表,在循環體中對每一個字典進行相同的處理。
card_list=[{"name": "zhangsan","qq": "12345","phone": "110"},{"name": "lisi","qq": "123457","phone": "10086"}
]
for card_info in card_list:print(card_info)
輸出
{'qq': '12345', 'phone': '110', 'name': 'zhangsan'}
{'qq': '123457', 'phone': '10086', 'name': 'lisi'}
pop(key)
彈出對應的值
dit={1:"r",2:"b"}
print(dit.pop(1))
print (dit)
leetcode128:重復元素,hash表實現線性時間查詢
class Solution(object):def singleNumber(self, nums):""":type nums: List[int]:rtype: int"""li={}for val in nums:try:li.pop(val)except:li[val]=1return li.popitem()[0] # 彈出元素,鍵為需要的答案
7.集合
集合-不可變的無序集合,元素唯一,用大括號定義,支持集合的交和并操作
set1 = {1, 2, 3}
set2 = set([2, 3, 4])
set3 = {1,1,2,3,5} # 實際set3 = {1,1,2,3,5}
print(set1 - set2) # 集合求差,包含在x 但是不包含在y中的元素:{1}
print(set1 | set2) # 集合求并:{1, 2, 3, 4}
print(set1 & set2) # 集合求交:{2, 3}
print(set1 ^ set2) # 集合求異或, 只被一個集合包含的元素 {1, 4}
print(set1 > set2) # 包含關系,set1 真包含于set2,返回True :False