漫步人生路之Python旅途(五)高山流水

来源:https://www.cnblogs.com/caesar-id/archive/2019/01/05/10225838.html
-Advertisement-
Play Games

字典dict字典是由大括弧{鍵:值}組成.字典是無序的.字典的鍵是不可變的,不能使用列表作為鍵.但可以使用元祖作為字典的鍵.例如: 新增 setdefault(鍵,值):如果只寫鍵不寫值將列印該鍵所對應的值,如果沒有找到鍵返回Note fromkeys(字典鍵列表,值):如果值是列表,是可變的那麼如 ...


字典dict
字典是由大括弧{鍵:值}組成.字典是無序的.字典的鍵必須是不可變數據類型,不能使用列表作為鍵.但可以使用元祖作為字典的鍵.例如:

dict_ = {"test":"Hello World"}

str_ = "hello"
dict_ = {str_:"霍元甲"}      # 這是正確的

list_ = [1,2,3]
dict_ = {list_:"西游記"}     # 這是錯誤的

tuple_ = (1,2,3)
dic = {tuple_:"紅樓夢"}      # 這是正確的

dict_ = {1:"陳真"}           # 這是正確的

dict_ = {True:"霍東閣"}      # 這是正確的

dict_1 = {"字典":""}
dict_ = {dict_1:"三國演義"}   # 這是錯誤的

新增

setdefault(鍵,值):如果只寫鍵不寫值將列印該鍵所對應的值,如果沒有找到鍵返回Note

# dict['鍵'] = '值'
dict_ = {"電視劇":"笑傲江湖"}
dict_["電影"] = "黃飛鴻"

dict_.setdefault("新增","我是新增的")  # setdefault()函數添加鍵值對
print(dic)

# 列印如下內容:
{'電視劇': '笑傲江湖', '電影': '黃飛鴻', '新增': '我是新增的'}

# 如果setdefault(鍵)如果只寫鍵不寫值是查詢鍵的值.
print(dict_.setdefault("新增"))

# 列印如下內容:
我是新增的 

fromkeys(字典鍵列表,值):如果值是列表,是可變的那麼如果更改列表中的值會影響整個字典鍵中的值.

dict_ = {}
list_str = ["name","age"]
dict_ = dict_.fromkeys(list_str,[1,2,3])
dict_["name"].append(4)    # 向dict_["name"]中追加元素4                                            
print(dic)

# 列印內容如下:
{'name': [1, 2, 3, 4], 'age': [1, 2, 3, 4]}     # 發現修改name鍵的值後,age鍵的值也發生了改變,和name鍵的值一樣

可以通過重新給鍵賦值的方法,擺攤更改鍵中的值,而影響整個字典中鍵的值.

dic={}
s = ["name","age"]
dic = dic.fromkeys(s,[1,2,3])
dic["name"] = [10,2]
print(dic)

# 列印內容如下:
{'name': [10, 2], 'age': [1, 2, 3]}

刪除

pop(鍵):刪除字典中的鍵值對

dict_ = {"電視劇":"西游記","電影":"少林寺"}
print(dict_.pop("test"))  # pop()如果找不到鍵會報錯

# 列印內容如下:
KeyError: 'test'     # 沒有找到鍵

 給pop(鍵,提示信息):添加個參數,用於在沒有找到鍵時提示給用戶

dict_ = {"電視劇":"西游記","電影":"少林寺"}
print(dict_.pop("test","沒有找到該鍵"))  # 可以在pop(鍵,提示信息)

# 列印內容如下:
沒有找到該鍵       # 用於提示用戶這個鍵沒有找到.

pop(鍵,提示語句)是有返回值的,可以返回被刪除的鍵的值.

popitem():沒有參數,返回值是被刪除的鍵值對,Python3.6以上版本刪除最後一項鍵值對,其它版本是隨機刪除一組鍵值對.

dict_ = {"電視劇":"西游記","電影":"少林寺"}
dict_.popitem()
print(dic)

查找

keys():列印字典所有的鍵

dict_ = {"電視劇":"霍元甲","電影":"黃飛鴻"}
print(dict_.keys())

# 列印內容如下:
dict_keys(['電視劇', '電影'])

values():列印字典所有的值

dict_ = {"電視劇":"霍元甲","電影":"黃飛鴻"}
print(dict_.values())

# 列印內容如下:
dict_values(['霍元甲', '黃飛鴻'])

items():列印字典所有的鍵值對
dic = {"電視劇":"霍元甲","電影":"黃飛鴻"}


dict_ = {"電視劇":"霍元甲","電影":"黃飛鴻"}
print(dict_.items())
# 列印內容下:
dict_items([('電視劇', '霍元甲'), ('電影', '黃飛鴻')])

解構(常用操作)

a,b,c = 1,2,3
str_1,str_2 = "a","b"
list_1,list_2 = [1,2,3],["a","b","c"]
dict_1,dict_2 = {"電視劇":"上海灘"},{"電影":"黃飛鴻"}

print("a,b,c:",a,b,c,type(a),type(b),type(c))
print("str1,str2:",str_1,str_2,type(str_1),type(str_2))
print("list_1,list_2:",list_1,list_2,type(list_1),type(list_2))
print("dict_1,dict_2:",dict_1,dict_2,type(dict_1),type(dict_2))

# 列印內容如下:
a,b,c: 1 2 3 <class 'int'> <class 'int'> <class 'int'>
str1,str2: a b <class 'str'> <class 'str'>
list_1,list_2: [1, 2, 3] ['a', 'b', 'c'] <class 'list'> <class 'list'>
dict_1,dict_2: {'電視劇': '上海灘'} {'電影': '黃飛鴻'} <class 'dict'> <class 'dict'>

# 我們發現變數的數據類型和值的類型相同

 

buf = 1,2,3
buf_1 = "a","b","c"
buf_2 = [1,2,3],["a","b","c"]
buf_3 = {"電視劇":"上海灘"},{"電影":"黃飛鴻"}

print("buf:",buf,type(buf))
print("buf_1:",buf_1,type(buf_1))
print("buf_2:",buf_2,type(buf_2))
print("buf_3:",buf_3,type(buf_3))

# 列印結果如下
buf: (1, 2, 3) <class 'tuple'>
buf_1: ('a', 'b', 'c') <class 'tuple'>
buf_2: ([1, 2, 3], ['a', 'b', 'c']) <class 'tuple'>
buf_3: ({'電視劇': '上海灘'}, {'電影': '黃飛鴻'}) <class 'tuple'>

# 我們發現所有變數的數據類型都是元組tuple

 總結:如果=號兩邊變數的數量和值的數量相等,那麼變數的數據類型和值的數據類型相同,如果用一個變數接收用逗號","分隔的多個值時,變數最終的數據類型是tuple元組

通過解構的方式列印字典的鍵和值

dict_ = {"電視劇":"水滸傳","電影":"黃飛鴻"} 
for key_,val_ in dict_.items():   # 通過結構的方式列印鍵和值
print(key_,val_) 

# 列印內容如下:
電視劇 水滸傳 
電影 黃飛鴻

set集合:無序列表,集合的特性是沒有重覆數據.
可以使用大括弧 { } 或者 set() 函數創建集合,註意:創建一個空集合必須用 set() 而不是 { },因為 { } 是用來創建一個空字典的,還有set集合的值必須是不可變的如:整型,字元串,元祖.不能是列表,字典等可被修改的數據.如下操作:

set_1 = {1,2,3}            # 正確
set_2 = set()              # 定義一個空列表
set_3 = {"a","b","c"}      # 正確
set_4 = {True,False}       # 正確
set_5 = {1,2,"a",(1,2,3)}  # 正確
set_6 = {1,2,"a",[1,2,3]}  # 錯誤的賦值方式,list是可變的
print(set_3)

# 列印內容如下:
TypeError: unhashable type: 'list'

 

set_7 = {1,2,"a",{"字典":""}} # 錯誤的賦值方式,dict是可變的
print(set_7)

# 列印內容如下:
TypeError: unhashable type: 'dict'

 

set_8 = {1,2,"a",{5,7,9}} # 錯誤的賦值方式,set是可變的
print(set_3)

# 列印內容如下:
TypeError: unhashable type: 'set'

set集合中常用的方法:
新增
add():向集合中添加數據,參數必須是不可改變的.參數類型參考set的賦值.

set_ = {1,2,3}
set_.add(4)
print(set_)

#列印如下內容:
{1, 2, 3, 4}

 

set_ = {1,2,3}
list_ = ["a","n"]

set_.add(list_)   # 因為列表是可變的,所以不能用作集合的值

# 列印內容如下:
TypeError: unhashable type: 'list'

更新

update(可迭代對象):向集合中添加可迭代數據

set_1 = {1,2,"a"}
set_1.update([10,20,3])
set_1.update(("defghigk"))
set_1.update((10,20,30))
set_1.update({"字典":""})
print(set_1)

# 列印內容如下
{1, 2, 3, 10, 'g', 'h', 'd', 'a', 'i', 'k', 20, 'f', 'e', '字典', 30}

刪除:

set_3 = {1,2,"a"}
del set_3   # 因為集合是無序的沒有下標,所以用del只能刪除集合

pop():隨機刪除一個元素(測試如果有0,預設先刪除0.其它隨機)

set_3 = {1,2,"a"}
set_3.pop()     # 隨機刪除一個元素
print(set_3)

# 列印內容如下:
{2, 'a'}

remove(元素):根據元素刪除元素,如果刪除一個沒有的元素會報錯

set_3 = {1,2,"a"}
set_3.remove(2)
print(set_3)

# 列印內容如下:
{1, 'a'}

集合的其它操作:
交集:兩個集合裡面都存在的數據,可以使用&或者使用函數intersection來獲取兩個集合的交集.

set_1 = {1,2,3,4}
set_2 = {10,2,40,3}
set_3 = set_1 & set_2  # 通過&符號獲取set_1和set_2的交集
print(set_3)

# 列印內容如下:
{2, 3}

# 通過函數intersection()獲取交集
set_1 = {"a","b","c","d"} 
set_2 = {"z","c","a"}
set_3 = set_1.intersection(set_2) # 通過函數獲取set_1和set_2的交集 print(set_3) # 列印內容如下: {'a', 'c'}

並集:將兩個集合進行合併(集合是去重覆的).使用|符號或者使用union()函數

set_1 = {1,2,3,4}
set_2 = {10,2,40,3}
set_3 = set_1 | set_2 # 使用|符號獲取兩個集合的並集
print(set_3)

# 列印內容如下:
{1, 2, 3, 4, 40, 10}

# 通過函數union()獲取兩個集合的並集
set_1 = {"a","b","c","d"}
set_2 = {"z","c","a"}
set_3 = set_1.union(set_2) # 使用union()函數獲取兩個數的並集
print(set_3)

# 列印內容如下:
{'b', 'z', 'a', 'c', 'd'}

差集:從第一個集合中減去第一個集合和第二個集合共同存在的元素.使用符號-或者使用函數difference()來實現

set_1 = {1,2,3,4}
set_2 = {10,2,40,3}
set_3 = set_1 - set_2 # 通過符號-將set_1和set_2共同存在的元素從set_1中刪除,如果set_2在前就從set_2中刪除
print(set_3)

# 列印內容如下:
{1, 4}

set_1 = {"a","b","c","d"}
set_2 = {"z","c","a"}
set_3 = set_1.difference(set_2) # 通過函數difference()實現
print(set_3)

# 列印內容如下:
{'d', 'b'}

反交集:將兩個集合進行合併,並去除相同的元素,使用符號^或者symmetric_difference

set_1 = {1,2,3,4}
set_2 = {10,2,40,3}
set_3 = set_1 ^ set_2  # 使用^符號實現
print(set_3)

# 列印內容如下:
{1, 4, 40, 10}

set_1 = {"a","b","c","d"}
set_2 = {"z","c","a"}
set_3 = set_1.symmetric_difference(set_2)  # 使用函數實現
print(set_3)

# 列印內容如下:
{'z', 'b', 'd'}

子集:一個集合是否被另一個集合所包含.如果被另一個集合包含返回True,否則返回False.使用<符號或者issubset()

set_1 = {1,2,3,4}
set_2 = {10,2,40,3}
set_3 = set_1 < set_2  # 使用<符號實現
print(set_3)
# 列印內容如下:
False

set_1 = {"a","b","c","d"}
set_2 = {"z","c","a","b","d","e"}
set_3 = set_1.issubset(set_2)    # 使用函數實現
print(set_3)

# 列印內容如下:
True

超級:與子集相反,判斷一個集合是否包含另一個集合,如果包含另一個集合返回True否則返回False.使用符號>或者issuperset()

set_1 = {1,2,3,4,10,50,40}
set_2 = {10,2,40,3}
set_3 = set_1 > set_2   # 使用>符號
print(set_3)

# 列印內容如下:
True

set_1 = {"a","b","c","d"}
set_2 = {"z","c","a","b","d","e"}
set_3 = set_1.issuperset(set_2)   # 使用函數實現
print(set_3)

# 列印內容如下:
False

frozenset(可迭代對象):返回一個凍結的集合.被凍結的集合不能進行修改,刪除,添加等操作.如果不寫參數,則返回一個凍結的空的集合.參數是可迭代對象所以可以是列表,字典等
下麵是一些簡單的事例:

set_1 = {"a","b","c","d"}
dic_1 = {"字典":""}
list_1 = [1,2,3]

set_2 = frozenset(set_1)
dic_2 = frozenset(dic_1)
list_2 = frozenset(list_1)

print(type(set_2),set_2)
print(type(dic_2),dic_2)   # 字典只能看鍵不能看值,很多方法都不能用
print(type(list_2),list_2) # 列表的下標也不能使用,大多數函數不能用

# 列印內容如下:
<class 'frozenset'> frozenset({'b', 'd', 'a', 'c'})
<class 'frozenset'> frozenset({'字典'})
<class 'frozenset'> frozenset({1, 2, 3})

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 題意 "題目鏈接" Sol 由於階乘的數量增長非常迅速,而$k$又非常小,那麼顯然最後的序列只有最後幾位會發生改變。 前面的位置都是$i = a[i]$。那麼前面的可以直接數位dp/爆搜,後面的部分是經典問題,可以用逆康托展開計算。 cpp include define Pair pair defi ...
  • 分別用while迴圈和for迴圈來玩轉猜數字游戲 1.對於限定猜數字次數 (1)while迴圈 number = 56 count = 0while count < 3: guess_number = int(input("guess number:")) if guess_number == nu ...
  • CMD終端關於pip報錯,scrapy報錯的一種處理方法 如果在終端輸入pip,或scrapy,報如下錯誤: Fatal error in launcher: Unable to create process using '"' 這通常是因為你的電腦裝了兩個版本的python(python2.x和p ...
  • 一、Scala程式的開始->HelloScala 這裡的操作如同java的helloworld程式,直接放代碼! 在命令行操作中輸入命令: scalac HelloScala.scala scala HelloScala 二、Scala的數據類型 Scala與java相同,有八種基本數據類型: By ...
  • Python開發IDE:pycharm ,eclipse 快捷鍵:Ctrl+?整體註釋 一·運算符 +(加) -(減) *(乘) /(除) **(冪) %(餘) //(商) 判斷某個東西是否在某個東西裡邊 in not in 結果:布爾值 ==(等於) >(大於) <(小於) >=(大於等於) <= ...
  • Python的基本數據類型有數字(Number),字元串(string),列表(List)、集合(Set),元組(Tuple)和字典(Dictionary)。 數字:1.包括了整型、浮點型和布爾型,還加入了複數(int、float、bool、complex); 2.若是想知道它具體是什麼類型,可以調 ...
  • [原創]使用python對視頻/音頻文件進行詳細信息採集,併進行去重操作 轉載請註明出處 一.關於為什麼用pymediainfo以及pymediainfo的安裝 使用python對視頻/音頻文件進行詳細信息採集,併進行去重操作的核心是使用pymediainfo這個庫 之前本人一直在試著用moviep ...
  • 題意 "題目鏈接" Sol 設$f[i]$表示炸彈到達$i$這個點的概率,轉移的時候考慮從哪個點轉移而來 $f[i] = \sum_{\frac{f(j) (1 \frac{p}{q})}{deg(j)}}$ $f[1]$需要+1(炸彈一開始在1) cpp // luogu judger enabl ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...