python 數據字典用法_python數據字典的操作

一、什么是字典?

字典是Python語言中唯一的映射類型。

映射類型對象里哈希值(鍵,key)和指向的對象(值,value)是一對多的的關系,通常被認為是可變的哈希表。

字典對象是可變的,它是一個容器類型,能存儲任意個數的Python對象,其中也可包括其他容器類型。

字典類型與序列類型的區別:

1.存取和訪問數據的方式不同。

2.序列類型只用數字類型的鍵(從序列的開始按數值順序索引);

3.映射類型可以用其他對象類型作鍵(如:數字、字符串、元祖,一般用字符串作鍵),和序列類型的鍵不同,映射類型的鍵直接或間接地和存儲數據值相關聯。

4.映射類型中的數據是無序排列的。這和序列類型是不一樣的,序列類型是以數值序排列的。

5.映射類型用鍵直接“映射”到值。

字典是Python中最強大的數據類型之一。

二、如何創建字典和給字典賦值

簡單地說字典就是用大括號包裹的鍵值對的集合。(鍵值對也被稱作項)

一般形式:

id_db = {‘wang‘:{‘name‘:"delong",‘age‘:31,"addr":‘juye‘},‘liu‘:{‘name‘:"jun",‘age‘:42,"addr":‘shanghai‘},‘wan‘:{‘name‘:"li",‘age‘:18,"addr":‘biyang‘},

}

20180522200911427632.png

特點:

1、鍵與值用冒號“:”分開;

2、項與項用逗號“,”分開;

3、字典中的鍵必須是唯一的,而值可以不唯一。

三、字典的基本操作

1、如何訪問字典中的值?

adict[key] 形式返回鍵key對應的值value,如果key不在字典中會引發一個KeyError。

2、如何檢查key是否在字典中?

a、has_key()方法 形如:adict.haskey(‘name‘) 有–>True,無–>False

b、in 、not in?? 形如:‘name‘ in adict????? 有–>True,無–>False

3、如何更新字典?

a、添加一個數據項(新元素)或鍵值對

adict[new_key] = value 形式添加一個項

b、更新一個數據項(元素)或鍵值對

adict[old_key] = new_value

c、刪除一個數據項(元素)或鍵值對

del adict[key] 刪除鍵key的項 / del adict 刪除整個字典

adict.pop(key) 刪除鍵key的項并返回key對應的 value值

四、映射類型操作符

標準類型操作符(+,-,*,,<=,>=,==,!=,and,or, not)

a、字典不支持拼接和重復操作符(+,*)

b、字典的比較操作

先比較字典的長度也就是字典的元素個數

鍵比較

值比較

五、映射相關的函數

1、len() 返回字典的長度

2、hash() 返回對象的哈希值,可以用來判斷一個對象能否用來作為字典的鍵

3、dict() 工廠函數,用來創建字典

六、字典的方法

1、adict.keys() 返回一個包含字典所有KEY的列表;

2、adict.values() 返回一個包含字典所有value的列表;

3、adict.items() 返回一個包含所有(鍵,值)元祖的列表;

4、adict.clear() 刪除字典中的所有項或元素;

5、adict.copy() 返回一個字典淺拷貝的副本;

6、adict.fromkeys(seq, val=None) 創建并返回一個新字典,以seq中的元素做該字典的鍵,val做該字典中所有鍵對應的初始值(默認為None);

7、adict.get(key, default = None) 返回字典中key對應的值,若key不存在字典中,則返回default的值(default默認為None);

8、adict.has_key(key) 如果key在字典中,返回True,否則返回False。 現在用 in 、 not in;

9、adict.iteritems()、adict.iterkeys()、adict.itervalues() 與它們對應的非迭代方法一樣,不同的是它們返回一個迭代子,而不是一個列表;

10、adict.pop(key[,default]) 和get方法相似。如果字典中存在key,刪除并返回key對應的vuale;如果key不存在,且沒有給出default的值,則引發keyerror異常;

11、adict.setdefault(key, default=None) 和set()方法相似,但如果字典中不存在Key鍵,由 adict[key] = default 為它賦值;

12、adict.update(bdict) 將字典bdict的鍵值對添加到字典adict中。

七、字典的遍歷

1、遍歷字典的key(鍵)

for key in adict.keys():print key

2、遍歷字典的value(值)

for value in adict.values(): print value

3、遍歷字典的項(元素)

for item in adict.items():print item

4、遍歷字典的key-value

for item,value in adict.items(): print ‘key=%s, value=%s‘ %(item, value) 或 for item,value in adict.iteritems(): print ‘key=%s, value=%s‘ %(item, value)

注意:for item,value in adict.items(): print ‘key=%s‘, ‘value=%s‘, %(item, value) 這種寫法是錯誤的

八、使用字典的注意事項

1、不能允許一鍵對應多個值;

2、鍵必須是可哈希的。

具體的應用實例:

#獲取字典,數據字典有天然去重的功能,字典是無序的。

id_db = {‘wang‘:{‘name‘:"delong",‘age‘:31,"addr":‘juye‘},‘liu‘:{‘name‘:"jun",‘age‘:42,"addr":‘shanghai‘},‘wan‘:{‘name‘:"li",‘age‘:18,"addr":‘biyang‘},

}print(id_db)print(id_db["wan"]) #打印一個key對應的value

id_db["wan"]["name"]="wanli" #修改一個對應的value,的值

print(id_db["wan"]) #打印一個key對應的value

id_db["wan"]["qq"]=28776 #添加一個新的value對應的值

print(id_db["wan"]) #打印一個key對應的value

id_db["wan"].pop("age")#刪除一個value的值

print(id_db["wan"])

v=id_db.get("liu") #獲取一個key對應的值

print(v)

v=id_db.get("") #獲取一個key對應的值,當不存在時為None

vv =id("liu") #這樣也可以,但是如果沒有時會報錯,建議用get方法獲取

print(v)print(id_db.keys()) #獲取數據字典里面所有的key,轉換成列表

print(id_db.values()) #打印所有的value,轉換成列表

id_db["zhao"]={"name":"wanli"} #添加一個鍵,并為這個鍵賦值

id_db = {‘wang‘:{‘name‘:"delong",‘age‘:31,"addr":‘juye‘},‘liu‘:{‘name‘:"jun",‘age‘:42,"addr":‘shanghai‘},‘wan‘:{‘name‘:"li",‘age‘:18,"addr":‘biyang‘},

}

d_db2={ "naem":"ddddddddd",‘wan‘:{ ‘name‘:"liwan",

}

}

id_db.update(d_db2)#把d_db2的內容更新到id_db里面去,如果id_db 有相同的內容會進行更細,沒有回添加,注意如果有相同的key,會同步d_db2的內容

print(id_db)print(id_db.items()) #把字典變成列表,但如果字典數據量大的時候不要做這種事情,轉換很耗時間

"wang" in id_db #查看是否包含著key

print(id_db.setdefault("naem")) #如果存在就取出,不存在就添加一個key,kye的值是Noey

print(id_db.setdefault("wangdeeee")) #如果存在就取出,不存在就添加一個key,kye的值是None

print(id_db.setdefault("wangde","wdbdfbeebeb")) #如果存在就取出,不存在就添加一個key,給他附一個值values

print(dict.fromkeys([1,2,3,4,5,6,7],"dddd")) #把列表里面的按照順序取出來,當做key,把后面的東西當做values

print(id_db.popitem()) #隨機刪除一個值,是隨機刪除沒有順序

print(id_db)

循環:

id_db = {‘wang‘:{‘name‘:"delong",‘age‘:31,"addr":‘juye‘},‘liu‘:{‘name‘:"jun",‘age‘:42,"addr":‘shanghai‘},‘wan‘:{‘name‘:"li",‘age‘:18,"addr":‘biyang‘},

}

d_db2={ "naem":"ddddddddd",‘wan‘:{ ‘name‘:"liwan",

}

}for k,v in id_db.items():#效率低,因為有一個轉換過程,dict 轉list

print(k,v)for key in id_db: #效率高的用法

print(key,id_db[key])for key in enumerate(id_db): #增加key序列選項,序列是下標值

print("%s:%s" % key)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529242.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529242.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529242.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

雙系統安裝deepin20_win10deepin15.10雙系統安裝教程

第二步&#xff1a;下載深度啟動盤制作工具深度啟動盤制作工具地址第三步&#xff1a;制作U盤啟動盤打開第二部下載的啟動盤制作工具&#xff0c;并準備一個u盤插入待裝系統的電腦&#xff0c;選擇鏡像文件后&#xff0c;下一步選擇磁盤并勾選格式化磁盤&#xff0c;點下一步開…

ubuntu19 安裝git_在Ubuntu 18.04上安裝Git

步驟1.首先&#xff0c;通過運行以下命令確保您的系統和apt包列表完全更新&#xff1a;apt-get update -yapt-get upgrade -y第2步。在Ubuntu 18.04上安裝Git。現在讓我們安裝git&#xff1a;apt install git您可以使用以下命令來檢查已安裝的git版本&#xff1a;$ git --versi…

mysql更新多條數據6_mysql語句:批量更新多條記錄的不同值

mysql更新語句很簡單&#xff0c;更新一條數據的某個字段&#xff0c;一般這樣寫&#xff1a;如果更新同一字段為同一個值&#xff0c;mysql也很簡單&#xff0c;修改下where即可&#xff1a;這里注意 ‘other_values’ 是一個逗號(&#xff0c;)分隔的字符串&#xff0c;如&am…

php mysql query 行數_如何在PHP中獲取MYSQL數據庫返回的數據的行數?

展開全部1. mysql_num_rows 可得到e69da5e887aa3231313335323631343130323136353331333337383861查詢記錄數<?php $con mysql_connect("localhost", "hello", "321");if (!$con){die(Could not connect: . mysql_error());}$db_selected …

mysql數據庫開發環境_MacOS下搭載開發環境之數據庫篇(Mysql + Navicat)

一、安裝Mysql1、官網下載mysql的tar包(提示&#xff1a;建議vpn環境下載)2、解壓并安裝tar包# 移動解壓后的二進制包到安裝目錄sudo mv mysql-5.7.19-osx10.9-x86_64 /usr/local/mysql# 更改 mysql 安裝目錄所屬用戶與用戶組cd /usr/localsudo chown -R root:wheel mysql# 初始…

mysql alter 唯一鍵_MySQL列屬性 之 唯一鍵

MySQL列屬性 之 唯一鍵唯一鍵唯一鍵&#xff1a;每張表往往有多個字段需要具有唯一性&#xff0c;數據不能重復&#xff0c;但是在每張表中&#xff0c;只能有一個主鍵&#xff0c;因此 唯一鍵就是用來解決表中多個字段需要具有唯一性的問題。例如身份證號碼應該每一行的記錄不…

如何在mysql中添加復選框_如何使用輸入和復選框更新mysql

如果我理解正確,您需要這樣做:mysql_query("UPDATE mp3SETaktif 1,baslik " . mysql_escape_string($_POST[baslik]) ."WHERE id $zuha");mysql_query("update mp3 set aktif 1,baslik $_POST[baslik]where id $_POST[id]")現在唯一的區別…

mysql 檢查列是否存在,如何檢查mysql表列是否存在?

How can I check if mysql table field even exists ?The column name is price and I need to see if it exists.Havent understood really how the EXISTS works...Any examples or ideas ?Thanks解決方案In PHP:$fields mysql_list_fields(database_name, table_name);$c…

mysql proxy yum_mysql 高可用架構 proxysql 之一 yum安裝

os:centos 7.4mysql: 5.7proxysql: 1.4.10ip 規劃如下&#xff1a;192.168.56.101 node1 (proxysql)192.168.56.102 node2 (mysql master)192.168.56.103 node3 (mysql slave)192.168.56.104 node4 (mysql slave)安裝mysql 5.7node2、node3、node4 安裝 mysql 5.7 software詳細…

wpf 使用位圖畫圖為什么斷斷續續_WPF的未來是微軟WinUi!

WPF(Windows Presentation Foundation)是微軟推出的基于Windows 的用戶界面框架&#xff0c;屬于.NET Framework 3.0的一部分。它提供了統一的編程模型、語言和框架&#xff0c;真正做到了分離界面設計人員與開發人員的工作&#xff1b;同時它提供了全新的多媒體交互用戶圖形界…

antd新增一行頁碼不正確_antd-Table@4.x對rowKey屬性的重構

時間&#xff1a;2020/04/26 &#xff0c;轉載請注明出處。寫在前面antd團隊于2020年2月發布了醞釀已久的antd4.0版本&#xff0c;對樣式的調整、部分組件邏輯的重構都進行了較大改動&#xff0c;本文針對Table的rowKey屬性重構作分析。由一個mistake帶來的思考在數據治理模塊的…

qt調用mysql調用了存儲過_Qt調用Server SQL中的存儲過程

Server SQL中的存儲過程如下&#xff1a;CREATE procedure PINSERTPCpcnum int,pcname varchar(50),pctype int,ipaddress varchar(50),port int,pcid int outputas--declare pcid intif exists (select * from COMPUTERTABLE where PcNum pcnum)set pcid -1elsebegininser…

pandas mysql index_Pandas從入門到精通(3)- Pandas多級索引MultiIndex

首先了解一下什么是多級索引&#xff0c;以及它的作用&#xff0c;為什么要有這個玩意。多級索引也稱為層次化索引(hierarchical indexing)&#xff0c;是指數據在一個軸上(行或者列)擁有多個(兩個以上)索引級別。之所以引入多級索引&#xff0c;在于它可以使用戶能以低維度形式…

tensorflow 啟動多個session_Tensorflow源碼解析7 -- TensorFlow分布式運行時

1 概述TensorFlow架構設計精巧&#xff0c;在后端運行時這一層&#xff0c;除了提供本地運行時外&#xff0c;還提供了分布式運行時。通過分布式訓練&#xff0c;在多臺機器上并行執行&#xff0c;大大提高了訓練速度。前端用戶通過session.run()啟動系統執行時&#xff0c;tar…

shell swt 樣式_SWT之路:SWT圖像顯示

簡明現代魔法 -> Java編程語言 -> SWT之路&#xff1a;SWT圖像顯示SWT之路&#xff1a;SWT圖像顯示2009-10-03程序演示還是先用SWT Desiner創建界面程序。然后創建一個Display對象和Image對象&#xff0c;和一個GC對象。類org.eclipse.swt.graphics.GC是一個封裝了所有可…

swool tcp mysql_swoole/mysql(異步)

# 異步Swoole\Mysql**(要求Workerman版本>3.3.6)**## 注意:此組件由swoole底層提供&#xff0c;由C語言編寫&#xff0c;具有超高性能。## 安裝&#xff1a;安裝有swoole擴展即可## 示例&#xff1a;phprequire_once ../Autoloader.php;use Workerman\Worker;use \Swoole\My…

xamarin和mysql_Xamarin.Android 使用 SQLiteOpenHelper 進行數據庫操作

一、前言在手機中進行網絡連接不僅是耗時也是耗電的&#xff0c;而耗電卻是致命的。所以我們就需要數據庫幫助我們存儲離線數據&#xff0c;以便在用戶未使用網絡的情況下也可以能夠使用應用的部分功能&#xff0c;而在需要網絡連接的功能上采用提示方式&#xff0c;讓用戶決定…

python 絕對值誤差小于10-6_Python 被低估了的 10 個小技巧

hi&#xff0c;各位朋友們&#xff0c;小帥b回來啦&#xff0c;幾日不見&#xff0c;想我了么&#xff1f;今天給大家分享幾個我認為不錯的 Python 小技巧&#xff0c;有些可能被你低估了喲&#xff0c;get 起來&#xff01;那么接下來就是&#xff1a;學習 Python 的正確姿勢俗…

java bean驗證_javaBean--登錄驗證

packagecom.JAVABean;importjava.util.HashMap;importjava.util.Map;publiccla***egister{privateStringname;privateStringage;privateStringemail;privateMaperrorsnull;//聲明一個保存全部錯誤信息的map集合publicRegister(){//在構造方法中初始化屬性this.name""…

java讀取src xml文件路徑_Java獲取路徑方法相對路徑讀取xml文件方法

(1)、request.getRealPath("/");//不推薦使用獲取工程的根路徑(2)、request.getRealPath(request.getRequestURI());//獲取jsp的路徑&#xff0c;這個方法比較好用&#xff0c;可以直接在servlet和jsp中使用(3)、request.getSession().getServletContext().getRealPa…