python學習筆記-字典

来源:https://www.cnblogs.com/jimmy-share/archive/2018/11/14/9846207.html
-Advertisement-
Play Games

·字典(dict) 筆記: 字典(映射)成對出現,由鍵及其相應的值組成,鍵-值對稱作項(item),字典是python中唯一內置映射類型。字典中的鍵必須是獨一無二的。 在python 2中進行拷貝需要調用copy模塊;而在python 3 中可以直接使用淺拷貝copy(),當使用深拷貝deepcop ...


 

·字典(dict)

筆記:

 

  • 字典(映射)成對出現,由鍵及其相應的值組成,鍵-值對稱作項(item),字典是python中唯一內置映射類型。字典中的鍵必須是獨一無二的。
  • 在python 2中進行拷貝需要調用copy模塊;而在python 3 中可以直接使用淺拷貝copy(),當使用深拷貝deepcopy(),則需要調用copy模塊。
  • 相比於檢查列表是否包含指定的值,檢查字典是否包含指定的鍵效率更高。

 

@ 創建一個字典


 使用-值對序列創建字典(鍵-值在元組中組成列表):

>>> item = [('name','jimmy'),('age','25'),('address','fujian')]
>>> x = dict(item)
>>> print(x)
{'name': 'jimmy', 'age': '25', 'address': 'fujian'}

 使用關鍵字創建字典:

>>> d = dict(name='jimmy',age=25)
>>> print(d)
{'name': 'jimmy', 'age': 25}

 

@ 字典的基本操作


 字典的基本操作與序列類似:

>>> x ={'name':'jimmy','age':'25','address':'fujian'}
>>> print(len(x))    #len():查詢字典鍵-值對數
3
>>> print(x['name']) #x['']:查詢name鍵的值
jimmy
>>> x['address'] = 'beijing' #x['']='value':替換address鍵對應的值
>>> print(x)
{'name': 'jimmy', 'age': '25', 'address': 'beijing'}
>>> del x['address']  #del x['']:刪除字典中鍵為address的項
>>> print(x)
{'name': 'jimmy', 'age': '25'}  #檢查字典中是否包含鍵為name的項(成員資格)
>>> print('name' in x)
True

 

@ 字典的方法


fromkeys():創建一個新字典,其中包含指定的鍵,值預設為None

>>> x = dict.fromkeys([x for x in range(1,11)])  #創建10個項(鍵-值對)
>>> print(x)
{1: None, 2: None, 3: None, 4: None, 5: None, 6: None, 7: None, 8: None, 9: None, 10: None}

 淺拷貝(copy):

>>> x ={'name':'jimmy','age':'25','address':['fujian','beijing']}
>>> y = x.copy()
>>> print("x的ID為:",id(x))
x的ID為: 2394409585904
>>> print("y的ID為:",id(y))
y的ID為: 2394409586120
>>> y['age'] = 20
>>> print(x)
{'name': 'jimmy', 'age': '25', 'address': ['fujian', 'beijing']}
>>> print(y)
{'name': 'jimmy', 'age': 20, 'address': ['fujian', 'beijing']}
#結論:x和y指向的記憶體地址不同,所以兩個字典的值不會相互影響
>>> x['address'].remove('beijing') >>> print(x) {'name': 'jimmy', 'age': '25', 'address': ['fujian']} >>> print(y) {'name': 'jimmy', 'age': 20, 'address': ['fujian']}
#結論:刪除x字典的beijing時,y字典的值也隨著刪除。
這是因為淺拷貝只複製了第一層數據,字典里存儲的子列表,列印出來是子列表,
在記憶體里,字典里只是存儲了子列表的記憶體地址,子列表在記憶體里是單獨存儲的。

深拷貝(deepcopy):需要導入copy模塊

>>>from copy import deepcopy  #導入模塊
>>> x ={'name':'jimmy','age':'25','address':['fujian','beijing']}
>>> y = deepcopy()
>>> print("x的ID為:",id(x))
x的ID為: 2394409585904
>>> print("y的ID為:",id(y))
y的ID為: 2394409586120
>>> y['age'] = 20
>>> print(x)
{'name': 'jimmy', 'age': '25', 'address': ['fujian', 'beijing']}
>>> print(y)
{'name': 'jimmy', 'age': 20, 'address': ['fujian', 'beijing']}
#結論:x和y指向的記憶體地址不同,所以兩個字典的值不會相互影響
>>> x['address'].remove('beijing')
>>> print(x)
{'name': 'jimmy', 'age': '25', 'address': ['fujian']}
>>> print(y)
{'name': 'jimmy', 'age': 20, 'address': ['fujian', 'beijing']}
#結論:刪除x字典的beijing時,y字典的值不會被刪除。這是因為深複製把子列表也複製了一份

方法集合詳解:

>>> x = {'name':'jimmy','age':'18','address':'Fujian','phone':'123456'}
>>> y = {'age':'100'}
>>> print(x.get('name','not found it'))     
jimmy  #get():查找x字典中name鍵的值,返回其鍵的值。它還提供預設值;x中沒有name時,返回指定值not found it(沒有指定則預設為None)
>>> print(x.setdefault('favorire','apple'))
apple  #setdefault():查找x字典中favorite鍵的值,返回其鍵的值;如果沒有找到鍵,將在字典中添加一個鍵-值對(如果沒有指定則預設為None)
>>> print(x) {'name': 'jimmy', 'age': '18', 'address': 'Fujian', 'phone': '123456', 'favorire': 'apple'} >>> print("item()方法:",x.items()) #items():返回所有字典項(鍵值對)的列表 item()方法: dict_items([('name', 'jimmy'), ('age', '18'), ('address', 'Fujian'), ('phone', '123456'), ('favorire', 'apple')]) >>> print("keys()方法:",x.keys()) #keys():返回字典中的鍵 keys()方法: dict_keys(['name', 'age', 'address', 'phone', 'favorire']) >>> print("values()方法:",x.values()) #values():返回字典中的值 values()方法: dict_values(['jimmy', '18', 'Fujian', '123456', 'apple']) >>> print("pop()方法:",x.pop('name')) #pop(): 獲取指定鍵相關聯的值,並將該鍵-值對從字典中刪除。 pop()方法: jimmy >>> print(x) {'age': '18', 'address': 'Fujian', 'phone': '123456', 'favorire': 'apple'} >>> print("popitem()方法:",x.popitem()) #popitem():隨機彈出一個項鍵值對(字典無序) popitem()方法: ('favorire', 'apple') >>> print(x) {'age': '18', 'address': 'Fujian', 'phone': '123456'} >>> print("update()方法:",x.update(y))  #update():使用一個字典來更新另一個字典,如果字典中沒有,將添加一個項 update()方法: None >>> print(x) {'age': '100', 'address': 'Fujian', 'phone': '123456'} >>> print("clear()方法:",x.clear()) #刪除所有字典項 clear()方法: None >>> print(x) {}

 

@ 淺拷貝應用:


 假設tom和jimmy分別持有信用卡主卡和副卡,共用額度10000,兩個人都可以使用信用卡消費。

>>> creditcard = ['name',['saving',10000]]
>>> tom = creditcard.copy()
>>> jimmy = creditcard.copy()
>>> tom[0] = 'tom'
>>> jimmy[0] = 'jimmy'
>>> tom[1][1] = 5000     #假設tom消費5000元
>>> print('信用卡餘額:',creditcard)
信用卡餘額: ['name', ['saving', 5000]]
>>> print('tom的剩餘額度',tom)
tom的剩餘額度 ['tom', ['saving', 5000]]
>>> print('jimmy剩餘額度',jimmy)
jimmy剩餘額度 ['jimmy', ['saving', 5000]]

 end~

****** 幾米花的Python ****** 博客主頁:https://www.cnblogs.com/jimmy-share/  歡迎轉載 ~
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 51.HashMap的實現原理 HashMap的主幹是一個Entry數組。 Entry是HashMap的基本組成單元, 每一個Entry包含一個key-value鍵值對。 HashMap基於hashing原理, 我們通過put()和get()方法儲存和獲取對象。 當我們將鍵值對傳遞給put()方法時 ...
  • 包導入格式 導入模塊時除了使用模塊名進行導入,還可以使用目錄名進行導入。例如,在sys.path路徑下,有一個dir1/dir2/mod.py模塊,那麼在任意位置處都可以使用下麵這種方式導入這個模塊。 一個實際一點的示例,設置PYTHONPATH環境變數為 ,然後在此目錄下創建以上目錄和mod.py ...
  • 在講述fileinput模塊之前,首先說一下python內置的文件API—open()函數以及與其相關的函數。 我這裡主要講講其中四個比較重要和常用的方法,更多的方法,可以參考:菜鳥教程http://www.runoob.com/python/file-methods.html (1)file = ...
  • Python基礎知識(3):基本數據類型之數字 一、基本數據類型 數字Number、字元串String、列表List、元組Tuple、集合Set、字典Dictionary 二、數字 Python3支持int、float、bool、complex,其中只有一種整數類型int。 (1)內置函數type( ...
  • 前言:前面寫了後天管理系統工程搭建以及框架的整合測試,今天寫一下商品列表的分頁查詢 1 需求分析 前臺使用easyui的分頁工具,後臺則使用mybatis分頁插件pagehelper 如上圖所示,打開後臺首頁,點擊查詢商品,按下F12,可以看到easyui的分頁界面會向controller發送兩個數 ...
  • 1、安裝JDK1.7及以上 2、下載解壓sdk並且配置環境變數: ANDROID_HOME:...\adt-bundle-windows-x86_64-20140702\sdk PATH:%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools; dos檢 ...
  • 在做項目的時候,發現後臺把Date類型的屬性以json字元串的形式返回,前臺拿不到轉換後的日期格式,始終響應回去的都是long類型時間戳。 查閱資料之後找到解決方法(在springmvc的xml配置文件下): 修改之後運行結果: 還有就是前端提交日期的json,格式為2018-07-26,日期欄位希 ...
  • 1 from collections import Counter 2 3 s = "狗咬我一口,難道我還要去咬狗?" 4 # dic = {} 5 # for el in s: 6 # dic[el] = dic.setdefault(el,0) + 1 7 # print(dic) 8 9 c ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...