簡體   English   中英

如果 key1 不存在,Python dict 獲取 key2 值的最簡單和最干凈的方法

[英]Python dict easiest and cleanest way to get value of key2 if key1 is not present

我有一個像這樣的 python 字典,

d = {
"k1" : "v1",
"k2" : "v2"
}

我想從 dict 中獲取 k1 的值,我可以這樣做,

d.get("k1")

但問題是,有時字典中會缺少 k1。 在這種情況下,我想從字典中選擇 k2。 我現在這樣做

val = d.get("k1", None)
if not val:
    val = d.get("k2", None)

我也可以這樣

if "k1" in d:
    val = d['k1']
else:
    val = d.get("k2", None)

這些解決方案看起來不錯並且按預期工作,我想知道是否存在針對此問題的單線解決方案。

d.get()中的None指定如果沒有找到該做什么。

只需添加另一個d.get()而不是None

d.get('k1', d.get('k2', None))
#'v1'

一個d.get里面一個d.get

也許嘗試雙重dict.get

val = d.get("k1", d.get("k2", None))

現在:

print(val)

如果存在k1 ,則給出k1的值,如果沒有名為k1的鍵,則給出k2的值,但如果也沒有k2 ,則給出None

我的代碼執行了d.get ,但在參數內部您執行了None的第二個參數,在這種情況下,我們執行另一個d.get ,它用於k2 ,並且在第二個d.get中,它最終將第二個參數設置為None ,如果兩個鍵都不在d中,它只會給出None

編輯:

如果有更多鍵(即k3k4 ...),只需添加更多d.get s:

val = d.get("k1", d.get("k2", d.get("k3", d.get("k4"))))

只需添加一個:

print(val)

到 output 吧。

使用帶有next的生成器:

您還可以使用帶有next的生成器來獲取第一個值,如下所示:

val = next((d[i] for i in ['k1', 'k2', 'k3', 'k4'...] if i in d), None)

現在:

print(val)

也會給出正確的結果。

請記住添加一個None ,這樣如果這些鍵中的任何一個都沒有任何值,它就不會給出StopIteration

如果沒有內置的 function 可以滿足您的要求,那么您可以自己編寫; 您只需編寫一次,然后在您實際使用它的其他任何地方,它都是單行的。

def get_alt(d, *keys, default=None):
    return next((d[k] for k in keys if k in d), default)

例子:

>>> my_dict = {'a': 1, 'b': 2, 'c': 3}
>>> get_alt(my_dict, 'a', 'b', 'c')
1
>>> get_alt(my_dict, 'd', 'b', 'c')
2
>>> get_alt(my_dict, 'd', 'e', 'c')
3
>>> get_alt(my_dict, 'd', 'e', 'f') is None
True
>>> get_alt(my_dict, 'd', 'e', 'f', default=4)
4
val = d.get("k1") or d.get("k2")

這相當於您的“我現在就這樣做”解決方案。 Noneget的默認值,無需指定。 與其他人發布的嵌套get不同,如果第一個成功,則不會同時執行兩個get

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM