![](/img/trans.png)
[英]Terse way of writing "if key1 or key2 are not in dict" Python
[英]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
。
編輯:
如果有更多鍵(即k3
, k4
...),只需添加更多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")
這相當於您的“我現在就這樣做”解決方案。 None
是get
的默認值,無需指定。 與其他人發布的嵌套get
不同,如果第一個成功,則不會同時執行兩個get
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.