Python中的字典和集合

来源:http://www.cnblogs.com/niuxichuan/archive/2016/01/20/5146907.html
-Advertisement-
Play Games

一、字典(dict) 1. 概述 字典是Python唯一的映射類型。 只能使用不可變的對象(比如字元串)來作為字典的鍵,但是可以把不可變或可變的對象作為字典的值。 鍵值對在字典中以這樣的方式標記:d = key1 : value1, key2 : value2 。註意它們的鍵/值...


一、字典(dict)

     1. 概述

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

         只能使用不可變的對象(比如字元串)來作為字典的鍵,但是可以把不可變或可變的對象作為字典的值。

         鍵值對在字典中以這樣的方式標記:d = key1 : value1, key2 : value2 。註意它們的鍵/值對用冒號分割,而各個對用逗號分割,

    所有這些都包括在花括弧中。

         字典中的鍵/值對是沒有順序的。

         字典是 dict 類的實例/對象。

     2. 創建與訪問

         直接通過花括弧括起來鍵/值對來創建。可以這樣來創建空字典。字典可以索引,只不過索引值是鍵值。

         利用內置函數 dict() 來創建字典,註意整個函數只有一個參數,如下:

         dict3 = dict((('F',70), ('i',105), ('h',115), ('c',67))),只要能讓它找到映射關係就OK。

         還可以指定關鍵字參數來創建字典:

         dict4 = dict(Turing = '讓編程改變世界'),註意此時鍵即 Turing 不能加引號,會報錯。

         對於字典還可以通過鍵來修改值,如果存在這個鍵,就會修改其值,如果根本不存在這個鍵,就會再添加一個鍵/值對。如:

         dict4[‘ Turing ’] = ‘ 大家一起來編程’

         dict4[' Edison '] = ' 大發明家'

         >>>dict4

         {'Turing': '大家一起來編程', 'Edison': '大發明家'}。

     3. 字典的內置方法

         1) fromkeys()

            >>> dict1 = {}

            >>> dict1.fromkeys((1,2,3))

                   {1: None, 2: None, 3: None}
            >>> dict1.fromkeys((1,2,3), 'Number')
                   {1: 'Number', 2: 'Number', 3: 'Number'}
            >>> dict1.fromkeys((1,2,3),('one','two','three'))
                   {1: ('one', 'two', 'three'), 2: ('one', 'two', 'three'), 3: ('one', 'two', 'three')}

            >>>dict1.fromkeys((1,3),'數字')

                   {1: '數字', 3: '數字'}

             fromkeys方法用來創建一個字典,有兩個參數,一個是鍵,一個是值。註意第二個參數都會賦給所有的鍵,沒有聰明的一一對應。

             沒有辦法通過這個辦法修改鍵的值,強制修改的話會創建一個新的字典。

          2)keys()  values()  items()

             分別遍歷鍵、值、項。

          3)get()

             當索引並不是字典中的鍵時,訪問輸出時會出錯,用get()方法可以巧妙的解決這個問題。

                >>> print(dict2[31])

                       贊
                >>> print(dict2[32])
                       Traceback (most recent call last):
                       File "<pyshell#17>", line 1, in <module>
                       print(dict2[32])
                       KeyError: 32
                >>> dict2.get(32)
                >>> print(dict2.get(32))
                        None
                >>> dict2.get(32,'木有')
                        '木有'
                >>> dict2.get(31,'木有')
                        '贊'

            4)clear()

               清空字典。如果直接把想要清空的字典賦給空字典,和clear()方法還是有很多不同的,有時候可能有威脅,還是使用clear()方法。

               >>> dict2.clear()

               >>> dict2
                      {}
               >>> dict2 = {}
               >>> a = {'你好': '哈哈'}
               >>> b = a
               >>> b
                      {'你好': '哈哈'} 
               >>> a = {}
               >>> b
                      {'你好': '哈哈'}
               >>> a = b
               >>> a
                       {'你好': '哈哈'}
               >>> b
                       {'你好': '哈哈'}
               >>> a.clear()
               >>> a
                      {}
               >>> b

                      {}

           5)copy()

              淺拷貝,和賦值操作的不同看代碼:

              

               >>> a = {1:'one',2:'two',3:'three'}
               >>> b = a.copy()
               >>> c = a
               >>> c
                       {1: 'one', 2: 'two', 3: 'three'}
               >>> a
                       {1: 'one', 2: 'two', 3: 'three'}
               >>> b
                       {1: 'one', 2: 'two', 3: 'three'}
               >>> id(a)
                       57877832
               >>> id(b)
                       57838536
               >>> id(c)
                       57877832

           6) pop() 與 popitem() 

               一個是彈出值,一個是彈出項,後者是隨機彈出的。

               

               >>> a.pop(2)
                       'two'
               >>> a
                       {1: 'one', 3: 'three'}
               >>> a.popitem()
                       (1, 'one')

           7) setdefault()

               添加鍵或添加鍵/值對。如:

               (註:添加後的順序隨機)

               >>> a.setdefault('sq')
               >>> a
                      {'sq': None, 3: 'three'}
               >>> a.setdefault(5,'five')
               >>> a
                      {3: 'three', 5: 'five', 'sq': None}

            8) update()

                用字典來更新字典,如果參數字典中的鍵原字典有就更新其值,沒有就自動添加上去新鍵。

二、集合(set)

          1. 概述

             集合是字典的“表親”,花括弧不只是字典的特權。當用花括弧括起來一堆沒有映射關係的元素時就創建了一個集合。

             

            >>> num2 = {1, 2, 3, 4}
            >>> type(num2)
                  <class 'set'>

          2. 和數學中的概念一樣,集合具有互異性,無序性(因此集合無法用於索引)。

             

            >>> num= {1, 2, 3, 4, 6, 3, 2}
            >>> num
                   {1, 2, 3, 4, 6}
            >>> num[2]
                    Traceback (most recent call last):
                    File "<pyshell#4>", line 1, in <module>
                    num[2]
                    TypeError: 'set' object does not support indexing

           3. 內置工廠函數 set() 可以用來創建集合,參數可以是列表,元組,甚至是字元串。

                

           >>> set1 = set([1,2,3, 4,5])
           >>> set1
                  {1, 2, 3, 4, 5}

           4. 因為集合的互異性,反而給序列中去除相同的元素提供了一個巧妙的方法。

               list2 = list(set(list1))

               缺點是無法保證和原序列同樣的順序,慎用。

           5. 集合的內置方法 add() remove() 

               創建不可變集合的函數 frozenset().

           6. 其他常見集合內建方法總結

              

             


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

-Advertisement-
Play Games
更多相關文章
  • Swift和OC基於AFNetworking的網路請求流程相同, 就是語法不同, 對於Swift語法不是很清楚的同學, 建議多看看API文檔, 自己多多嘗試. 寫過OC的應該都明白每句話做什麼的, 就不過多解釋了. 之前有講過如何進行混編, 所以集成AFNetworking的過程就不再贅述 ...
  • BuildPath中只支持加入jar文件,具體方法如下:在eclips里在工程名上右鍵->build path->contigure bud path->java build path里有個libraries->add external jars = 增加工程外部的包add jars = 增加工程內...
  • 1.django安裝在http://www.djangoproject.com/download/這個網站上可以下載django的最新版本。在下載時,要註意django版本和本機安裝的Python版本是匹配的。在這個https://docs.djangoproject.com/en/dev/faq/...
  • 環境:smarty1.在http://www.smarty.net/download下載最新smarty包,window選擇zips,linux下選擇tar.gz。以windows為例,下載後解壓,如f:\smarty。2.把解壓出來的smarty目錄里lib目錄拷貝到test里,重命名為smart...
  • 指針是C語言的靈魂,我想對於一級指針大家應該都很熟悉,也經常用到:比如說對於字元串的處理,函數參數的“值,結果傳遞”等,對於二級指針或者多級指針,我想理解起來也是比較容易的,比如二級指針就是指向指針的指針.....n級指針就是....但是可能大家比較不容易理解的是,二級指針或者多級指針用在哪裡呢?怎...
  • /** * 遍歷list的方法 * @param args */ public static void main(String[] args) { List list = new ArrayList(); list.add("111"); ...
  • 對於初學者朋友,在OC指針指針修改對象屬性掌握起來一般問題不大的,但是要再來幾個"函數"和你"折騰"呢?哈哈!看看你又沒有中過槍吧!看下麵一段代碼:void test1(int newAge,double newHeight);void test2(Person *newP);void tes...
  • 1. Callable、Future、RunnableFuture、FutureTask的繼承關係 在多線程編程中,我們一般通過一個實現了Runnable介面的對象來創建一個線程,這個線程在內部會執行Runnable對象的run方法。如果說我們創建一個線程來完成某項工作,希望在完成以後該線程能夠返回...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...