亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么要得到(鍵)而不是迪克[鍵]?

為什么要得到(鍵)而不是迪克[鍵]?

函數式編程 2019-06-06 13:05:10
為什么要得到(鍵)而不是迪克[鍵]?今天,我遇到了dict方法get其中,給定字典中的一個鍵,則返回關聯的值。這個函數的用途是什么?如果我想在字典中找到一個與鍵相關的值,我可以這樣做。dict[key],并返回相同的內容:dictionary = {"Name": "Harry", "Age": 17}dictionary["Name"]dictionary.get("Name")
查看完整描述

3 回答

?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

它允許您在缺少鍵時提供默認值:

dictionary.get("bogus", default_value)

回報default_value(無論你選擇它是什么)

dictionary["bogus"]

會引起KeyError.

如果省略,default_valueNone,以至于

dictionary.get("bogus")  # <-- No default specified -- defaults to None

回報None就像

dictionary.get("bogus", None)

會的。


查看完整回答
反對 回復 2019-06-06
?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

什么是dict.get()方法?

如前所述,get方法包含一個指示缺失值的附加參數。從文件中

get(key[, default])

如果鍵在字典中,則返回鍵的值,否則為默認值。如果未給出默認值,則默認為None,因此方法永遠不會引發KeyError.

一個例子可以是

>>> d = {1:2,2:3}>>> d[1]2>>> d.get(1)2>>> d.get(3)>>> repr(d.get(3))'None'>>> d.get(3,1)1

有速度提高嗎?

如前所述這里,

現在看來,這三種方法都表現出了相似的性能(在彼此約10%的范圍內),或多或少獨立于單詞列表的屬性。

更早get雖然速度要慢得多,但是現在的速度幾乎可以與返回默認值的額外優勢相媲美。但是為了清除所有的查詢,我們可以在一個相當大的列表上進行測試(注意,測試只包括查找所有有效的鍵)。

def getway(d):
    for i in range(100):
        s = d.get(i)def lookup(d):
    for i in range(100):
        s = d[i]

現在,使用以下方法對這兩個函數進行計時timeit

>>> import timeit>>> print(timeit.timeit("getway({i:i for i in range(100)})","from __main__ import getway"))20.2124660015
>>> print(timeit.timeit("lookup({i:i for i in range(100)})","from __main__ import lookup"))16.16223979

如我們所見,查找比GET更快,因為沒有函數查找。這可以通過dis

>>> def lookup(d,val):...     return d[val]... >>> def getway(d,val):...     return d.get(val)... >>> dis.dis(getway)
  2           0 LOAD_FAST                0 (d)
              3 LOAD_ATTR                0 (get)
              6 LOAD_FAST                1 (val)
              9 CALL_FUNCTION            1
             12 RETURN_VALUE        
>>> dis.dis(lookup)
  2           0 LOAD_FAST                0 (d)
              3 LOAD_FAST                1 (val)
              6 BINARY_SUBSCR       
              7 RETURN_VALUE

它在哪里有用?

每當您想要在查找字典時提供默認值時,它將非常有用。這減少了

 if key in dic:
      val = key[dic]
 else:
      val = def_val

一字一句,val = dic.get(key,def_val)

在哪里沒有用呢?

當您想返回KeyError聲明特定密鑰不可用。返回默認值也有風險,即一個特定的默認值也可能是一個鍵!

有沒有可能get類特征dict['key']?

是!我們需要實現__missing__在迪克特子類中。

示例程序可以是

class MyDict(dict):
    def __missing__(self, key):
        return None

一個小小的示范可以是

>>> my_d = MyDict({1:2,2:3})>>> my_d[1]2>>> my_d[3]>>> repr(my_d[3])'None'


查看完整回答
反對 回復 2019-06-06
?
catspeake

TA貢獻1111條經驗 獲得超0個贊

get接受第二個可選值。如果字典中不存在指定的鍵,則將返回此值。

dictionary = {"Name": "Harry", "Age": 17}dictionary.get('Year', 'No available data')>> 'No available data'

如果不給出第二個參數,None會被歸還。

如果使用索引,如dictionary['Year'],不存在的鍵將引發KeyError.


查看完整回答
反對 回復 2019-06-06
  • 3 回答
  • 0 關注
  • 415 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號