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
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...