1. 程式人生 > >基礎資料型別{dict:'字典'}

基礎資料型別{dict:'字典'}

⼀. 字典的簡單介紹
   字典(dict)是python中唯⼀的⼀個對映型別.他是以{ }括起來的鍵值對組成. 在dict中key是唯⼀的. 在儲存的時候, 根據key來計算出⼀個記憶體地址. 然後將key-value儲存在這個地址中.這種演算法被稱為hash演算法, 所以, 切記, 在dict中儲存的key-value中的key'必須是可hash的,如果你搞不懂什麼是可雜湊,暫時可以這樣記, 可以改變的都是不可雜湊的, 那麼可雜湊就意味著不可變. 這個是為了能準確的計算記憶體地址⽽規定的.

 

已知的可雜湊(不可變)的資料型別: int, str, tuple, bool
不可雜湊(可變)的資料型別: list, dict, set

 

語法 :
{key1: value1, key2: value2....}
注意: key必須是不可變(可雜湊)的. value沒有要求.可以儲存任意型別的資料

 

# 合法
dic = {123: 456, True: 999, "id": 1, "name": 'sylar', "age": 18, "stu": ['帥
哥', '美⼥'], (1, 2, 3): '麻花藤'}
print(dic[123])
print(dic[True])
print(dic['id'])
print(dic['stu'])
print(dic[(1, 2, 3)])

# 不合法
# dic = {[1, 2, 3]: '周杰倫'} # list是可變的. 不能作為key
# dic = {{1: 2}: "哈哈哈"} # dict是可變的. 不能作為key
dic = {{1, 2, 3}: '呵呵呵'} # set是可變的, 不能作為key

 

dict儲存的資料不是按照我們新增進去的順序儲存的. 是按照hash表的順序儲存的. ⽽hash表不是連續的. 所以不能進⾏切片⼯作. 它只能通過key來獲取dict中的資料

 

⼆. 字典的增刪改查和其他相關操作

1. 增加

dic = {}

dic['name'] = '周潤發' # 如果dict中沒有出現這個key, 就會新增⼀個key-value的組合進dict

dic['age'] = 18

print(dic)

# 如果dict中沒有出現過這個key-value. 可以通過setdefault設定預設值

dic.setdefault('李嘉誠') # 也可以往⾥⾯設定值.

dic.setdefault("李嘉誠", "房地產") # 如果dict中已經存在了. 那麼setdefault將不會起作⽤

print(dic)

 

2. 刪除

ret = dic.pop("jay")
print(ret)
del dic["jay"]
print(dic)
# 隨機刪除.
ret = dic.popitem()
# 清空字典中的所有內容
dic.clear()

 

 

3. 修改

dic = {"id": 123, "name": 'sylar', "age": 18}
dic1 = {"id": 456, "name": "麻花藤", "ok": "wtf"}
dic.update(dic1) # 把dic1中的內容更新到dic中. 如果key重名. 則修改替換. 如果不存在key, 則新增.
print(dic)
print(dic1)

 

4. 查詢

查詢⼀般⽤key來查詢具體的資料. 

 

print(dic['name'])
# print(dic['sylar']) # 報錯
print(dic.get("ok"))
print(dic.get("sylar")) # None
print(dic.get("sylar", "NB")) # NB

 

5. 其他相關操作

 

dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科⽐"}
print(dic.keys()) # dict_keys(['id', 'name', 'age', 'ok']) 不⽤管它是什麼.當
成list來⽤就⾏
for key in dic.keys():
print(key)

print(dic.values()) # dict_values([123, 'sylar', 18, '科⽐']) ⼀樣. 也當
list來⽤
for value in dic.values():
print(value)
print(dic.items()) # dict_items([('id', 123), ('name', 'sylar'), ('age',18), ('ok', '科⽐')]) 這個東⻄也是list. 只不過list中裝的是tuplefor key, value in dic.items(): # ?? 這個是解構

print(key, value)
# 解構
a, b = 1, 2
print(a, b)
(c, d) = 3, 4
print(c, d)

e, f = [1, 2, 3] # 解構的時候注意數量必須匹配
print(e, f)

 

三. 字典的巢狀

# 字典的巢狀
dic1 = {
  "name": "汪峰",
  "age": 18,
  "wife": {
    "name": '章⼦怡',
    "age": 28
  },
  "children": ['第⼀個⽑孩⼦', '第⼆個⽑孩⼦'],
  "desc": '峰哥不會告我吧. 沒關係. 我想上頭條的'
  }
print(dic1.get("wife").get("name"))

print(dic1.get("children"))
print(dic1.get("children")[1])