Python編程快速上手-第五章

字典

字典的索引是key,key一般是字符串或數(shù)字
names = {123:'geed','park':'nice','900':'pool'}
names[123]
names['park']
訪問不存在的key會導(dǎo)致錯誤,在訪問前可以先判斷成員資格,使用if語句
if name in birthdays:

keys() / values() / items()

字典的dict_keys、dict_values 和dict_items數(shù)據(jù)類型可用于for循環(huán)。獲取數(shù)據(jù)類型type()。
for v in spam.values()
for k in spam.keys()
for i in spam.items(),for key , value in spam.items()
list(spam.keys())

get()方法

該方法僅僅用于dict()。類似于向dict中取一個key的vaule,如果key不存在就返回默認值,不會改變原始dict。

>>> picnicItems = {'apples': 5, 'cups': 2}
>>>picnicItems.get('cups', 0)
2

setdefault()方法

為Dict的key設(shè)置一個默認值,如果Dict中不存在該Key,就在Dict中添加該Key及其默認value同時返回該key的value,如果該Key存在就返回key對應(yīng)的values值。
key存在就不改變dict,如果key不存在dict就會添加新的鍵值對。

統(tǒng)計字符串的字母出現(xiàn)的次數(shù):

def count_char(message):
    count = {}
    for char in message:
        count.setdefault(char,0)
        count[char] = count[char] + 1
    print(count)
    return(count)

測試函數(shù)

import unittest
from open import count_char

class OpenTest(unittest.TestCase):

    def test_count(self):
        message = 'It was a bright cold day in April, and the clocks were striking thirteen.'
        fun_return = count_char(message)
        result = {' ': 13, ',': 1, '.': 1, 'A': 1, 'I': 1, 'a': 4, 'c': 3, 'b': 1, 'e': 5, 'd': 3, 'g': 2, 'i':
                6, 'h': 3, 'k': 2, 'l': 3, 'o': 2, 'n': 4, 'p': 1, 's': 3, 'r': 5, 't': 6, 'w': 2, 'y': 1}
        self.assertEqual(fun_return,result)
unittest.main()

從運行的結(jié)果看,dict的排序每次都有差異,即便排序不一樣,也不會影響 self.assertEqual(fun_return,result)的結(jié)果

5.3.2 嵌套的字典和列表

例子的思路

allGuests = {'Alice': {'apples': 5, 'pretzels': 12},
            'Bob': {'ham sandwiches': 3, 'apples': 2},
            'Carol': {'cups': 3, 'apple pies': 1}}

循環(huán)兩次字典將水果的名字提取出來,再通過setdefault()將水果的名字和數(shù)量添加到新的列表

import pprint
def total_brought(guest):
   furists = {}
   for brougt in guest.values():
       for furist , numbers in brougt.items():
           furists.setdefault(furist,0)
           furists[furist] = furists[furist] + numbers
   pprint.pprint(furists)

5.6.2 列表到字典

用 if - else 去實現(xiàn)感覺邏輯很清晰,但是代碼更多。
用setdefault邏輯上要適應(yīng)一下才行

def add_to_inventory(intentory,added_items):
    for added_item in added_items:
        # if added_item in intentory.keys():
        #     intentory[added_item] += 1
        # else :
        #     intentory[added_item] = 1 
        intentory.setdefault(added_item,0)
        intentory[added_item] = intentory[added_item] + 1
    return intentory 

用循環(huán)對比了一下兩種方式實現(xiàn)的時間
使用if-else耗時37.539s
setdefault耗時38.618s
if-else執(zhí)行時間更短。

time1 = datetime.datetime.now()
print(time1)
n = 10**6
while n>0:
    stuff = {'rope': 1, 'torch': 6, 'gold coin': 42, 'dagger': 1, 'arrow': 12}
    dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']

    new = add_to_inventory(stuff,dragonLoot)
    n = n -1
    # print(new)
time2 = datetime.datetime.now()
print(time2)
print(time2-time1)

獲取系統(tǒng)時間(us)

系統(tǒng)時間,us級別
import datetime

datetime.datetime.now()
print(time2-time1)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,902評論 0 13
  • 字典:當(dāng)索引不好用時 字典是一種通過名字引用值的數(shù)據(jù)結(jié)構(gòu)。這種結(jié)構(gòu)類型稱為映射。字典是Python中唯一內(nèi)建的映射...
    mydre閱讀 566評論 0 0
  • 1. 數(shù)值類型 ** int 整數(shù) **如:1,100,-8080,0,十六進制:0xff00,0xa5b4c3d...
    泊牧閱讀 306評論 0 0
  • 發(fā)張前一段時間的彩鉛練筆,鼓勵自己繼續(xù)努力莫負時光。郁金香象征著永恒的愛,人生若只如初見又有多少人能遇到,只愿分開...
    牧洵閱讀 364評論 0 2
  • 2017年12月6日進入到最后一個月,今天去參加了一次面試,選擇這家公司就是因為離家近,面試過程還算順利,但是明顯...
    zamsr閱讀 181評論 0 0

友情鏈接更多精彩內(nèi)容