[TOC]
>[success] # dict -- 字典
~~~
1.字典是python中唯一的映射類型,采用鍵值對(key-value)的形式存儲數據。python對key進行哈希函數運算,根據
計算的結果決定value的存儲地址,所以字典是無序存儲的,且key必須是可哈希的。可哈希表示key必須是不可變類型,
如:數字、字符串、元組。
2.字典(dictionary)是除列表意外python之中最靈活的內置數據結構類型。列表是有序的對象結合,字典是無序的對象集合。兩者之間的區別在于:字典當中的元素是通過鍵來存取的,而不是通過偏移存取。
3.字典是用{key:value}大括號里面分別是key和value對應,字典的表現形式在實際的生產生活中比較常見例如網頁傳輸中的json,就是一種字典的傳輸方式
4.3.5以下含3.5字典是無序的,3.6以上字典是有序的但仍然可以使用orderdict 來保證有序字典
~~~
>[danger] ##### fromkeys 快速將迭代對象變成k,創建字典
~~~
# 這種情況三個key的列表指向都是一致的,所以進行更改的時候會統一更改44
dic = dict.fromkeys([1,2,3],[])
print(dic) # {1: [], 2: [], 3: []}
~~~
~~~
iterable1 = "12" # 字符串
iterable2 = [1,2] # 列表
iterable3 = (1,2) # 元祖
iterable4 = {1:'one',2:'two'} # 字典
v1 = dict.fromkeys(iterable1,'字符串')
v2 = dict.fromkeys(iterable2,'列表')
v3 = dict.fromkeys(iterable3,'元祖')
v4 = dict.fromkeys(iterable4,'字典')
v5 = dict.fromkeys(iterable4) #value默認為None
print(v1)
print(v2)
print(v3)
print(v4)
print(v5)
打印結果:
{'1': '字符串', '2': '字符串'}
{1: '列表', 2: '列表'}
{1: '元祖', 2: '元祖'}
{1: '字典', 2: '字典'}
{1: None, 2: None}
~~~
>[danger] ##### setdefault 字典的增加
~~~
# 有鍵值對,不做任何改變,沒有才添加。
python = {
"A" : 'JAVA',
"B" : "C",
"C" : "PYTHON",
}
python.setdefault('D')
python.setdefault('E','#c')
python.setdefault('A')
print(python)
打印結果:
{'A': 'JAVA', 'B': 'C', 'C': 'PYTHON', 'D': None, 'E': '#c'}
~~~
>[danger] ##### 字典的增加
~~~
# key 存在則替換對應value,不存在則添加一個鍵值對放入字典中
python = {
"A" : 'JAVA',
"B" : "C",
"C" : "PYTHON",
}
python['A'] = 'java被我替換了'
python['D'] = "無則添加"
print(python)
打印結果:
{'A': 'java被我替換了', 'B': 'C', 'C': 'PYTHON', 'D': '無則添加'}
~~~
>[danger] ##### pop -- 刪除指定字典中的k
~~~
python = {
"A": 'JAVA',
"B": "C",
"C": "PYTHON",
}
dic_key = python.pop("A")
print("返回值",dic_key)
print(python)
打印結果:
返回值 JAVA
{'B': 'C', 'C': 'PYTHON'}
~~~
* 刪除不存的key
~~~
python = {
"A": 'JAVA',
"B": "C",
"C": "PYTHON",
}
# 第二個參數是刪除的k 不存在時返回值,不寫刪除不存在會報錯
dic_key = python.pop("D",None)
print("返回值",dic_key)
print(python)
打印結果:
返回值 None
{'A': 'JAVA', 'B': 'C', 'C': 'PYTHON'}
~~~
>[danger] ##### del -- 刪除對象
~~~
python = {
"A": 'JAVA',
"B": "C",
"C": "PYTHON",
}
# 整個定義變量全都刪除
del python
~~~
>[danger] ##### clear--清空字典
~~~
python = {
"A": 'JAVA',
"B": "C",
"C": "PYTHON",
}
python.clear()
print(python)
打印結果:
{}
~~~
>[danger] ##### update -- 將兩個字典合并
~~~
1.update()可以將兩個字典合并,如果待添加的字典和帶擴充的字典有相同的key,新的會將原來的取代
~~~
~~~
python = {
"A" : 'JAVA',
"B" : "C",
"C" : "PYTHON",
}
java ={
"A": 'PHP',
"D": "GO",
}
python.update(java)
print(python)
打印結果:
{'A': 'PHP', 'B': 'C', 'C': 'PYTHON', 'D': 'GO'}
~~~
>[danger] ##### in -- 判讀字典中的key,是否存在字典中
~~~
python = {
"A" : 'JAVA',
"B" : "C",
"C" : "PYTHON",
}
print("A" in python)
print( "JAVA" in python)
打印結果:
True
False
~~~
>[danger] ##### get -- 查詢字典中的值
~~~
# 不存在的時候可以默認返回None 也可以指定返回內容
python = {
"A" : 'JAVA',
"B" : "C",
"C" : "PYTHON",
}
print(python.get('A'))
print(python.get("D"))
print(python.get("D",None))
打印結果:
JAVA
None
None
~~~
>[danger] ##### 打印字典鍵值對
~~~
python = {
"A" : 'JAVA',
"B" : "C",
"C" : "PYTHON",
}
print(python.keys())
print(python.values())
print(python.items())
打印結果:
dict_keys(['A', 'B', 'C'])
dict_values(['JAVA', 'C', 'PYTHON'])
dict_items([('A', 'JAVA'), ('B', 'C'), ('C', 'PYTHON')])
~~~
>[danger] ##### 循環配合字典
~~~
python = {
"A" : 'JAVA',
"B" : "C",
"C" : "PYTHON",
}
# 默認循環的是key
for i in python:
print(i)
for i in python.values():
print(i)
for i in python.keys():
print(i)
for k,v in python.items():
print(k,v)
~~~
>[danger] ##### 元祖列表轉字典
~~~
# 列表和元組轉換字典時,其中字符串的表達長度為2,否則就會報錯例:
A = ["大家","你好"]
dic = dict(A)
print(dic)
打印結果
{'大': '家', '你': '好'}
~~~
~~~
# 當字符串長度大于2等于1時 會報錯,因為字符是一個可迭代對象,將內容循環迭代
A = ["大家好","你好好啊好"]
dic = dict(A)
print(dic)
報錯信息
Traceback (most recent call last):
File "D:/pyGroup/ttt.py", line 2, in <module>
dic = dict(A)
ValueError: dictionary update sequence element #0 has length 3; 2 is required
~~~
~~~
# 當元組和列表中互相嵌套,轉換字典例:
A = [["大家","你好"],("我的名字","一個測試")]
dic = dict(A)
print(dic)
打印結果:
{'我的名字': '一個測試', '大家': '你好'}
~~~
- PYTHON-- 基礎
- Python -- 變量、常量、注解
- 算數\比較\賦值\邏輯運算符
- Python -- input 控制臺用戶輸入
- Python -- 流程控制/循環語句
- Python -- 切片
- Python -- 數據類型
- 基礎數據類型
- int -- 數字類型
- str -- 字符類型
- bool -- 布爾類型
- list -- 列表
- type -- 元祖
- dict -- 字典
- set -- 集合
- Python -- 深淺copy
- Python -- 文件的讀寫
- Python -- 函數
- 函數 -- 做參數使用
- 函數 -- 閉包
- 函數 -- 生成器
- 函數 -- 列表推導式
- 案例
- 基礎案例一
- 基礎案例二
- 基礎案例三
- COOKBOOK
- LIST、STR、DICT、TUPLE
- LIST - 列表方法總結
- 一、序列拆分成單獨變量
- 二、* 妙用
- 三、deque- 雙向隊列
- 四、求找到最大或最小的N個元素
- 4.1 heapq-- 簡單使用
- 五、去重并保持列表順序不變
- 六、切片slice
- 七、counter 統計序列中元素次數
- 八、itemgetter 列表套著字典排序
- 九、處理大量的列表數據
- 十、隨機事件處理列表
- DICT - 字典的總結方法
- 一、defaultdict 解決 KeyError
- 二、OrdereDict有序字典
- 三、zip 和 max/min 比較
- IDCT和LIST- 推導式
- 一、LIST 推導式
- 二、字典推到式
- TUPLE-元組
- 一、命名元組
- STR-字符串
- 一、常見的字符串方法
- 二、字符串拆分
- 三、字符串的位置匹配
- 四、字符串替換
- 五、正則大小寫/換行匹配
- 六、對字節類型處理
- 數字、日期、時間處理
- 一、數字的處理
- 二、時間換算
- 2.1 時間運算
- 2.2計算某一時刻上周幾的日期
- 2.2對時間轉換格式優化
- 迭代器和生成器
- 一、iter 迭代器 使用案例
- 二、生成器 yeild
- 三、構建一個反向迭代方法
- 四、實現反正函數構造
- 五、迭代對象切片/跳過元素
- 六、迭代出所有的組合排列
- 七、索引-值迭代序列化
- 八、zip 同時迭代多個序列
- 九、同時循環多個可迭代對象
- 十、yield from 遞歸案例
- 十一、合并序列,并按順序輸出
- 十二、使用 iter 替代 while True
- 操作文件
- 一、處理文件路徑
- 二、檢測文件/獲取文件信息
- 函數
- 一、函數基本案例使用
- 二、匿名函數
- 三、回調函數
- 四、閉包實現一個單個方法類
- 五、函數嵌套回調函數
- 類與對象
- 一、str/repr--讓類字符串表示
- 二、format -- 格式化類的內容
- 三、with -- 上下文管理類
- 四、創建節省內存的類
- 五、將類里面方法變成屬性
- 六、調用父類方法
- 七、擴展子類中的屬性
- 八、創建新的類或者實類屬性
- 九、簡化數據結果,簡化init
- 十、python 接口寫法
- 十一、通過類屬性創建委托訪問
- 十二、__new__重新初始化init
- 十三、通過字符串調用類
- 元編程
- 一、裝飾器
- 1.1 去掉裝飾器修飾
- 1.2 可接受參數裝飾器
- 1.3利用裝飾器對函數參數類型檢查
- 1.4編寫類裝飾器
- 1.5為類方法和靜態方法加裝飾器
- 1.6通過裝飾器給裝飾函數加參數
- 線程和進程