[英]Simple solution to get value from dict without knowing its key
假設有一個像這樣的dict
:
{
"State": "CA",
"County": "Sonoma",
"Population": 1200
}
如果我只知道County
的值,當我想獲得State
的值時,我編寫了下面的代碼,它運行良好。
d = {
"State": "CA",
"County": "Sonoma",
"Population": 900
}
def get_value(value_want, value_know):
value = [ d[value_want] for k, v in d.items() if v == value_know ]
# return None if list is empty
return value[0] if value else None
print(get_value("State", "Sonoma"))
# CA
但是,有沒有更簡單的方法來做到這一點? 這段代碼創建了一個看起來毫無意義的list
,因為我想要的只是dict
中的str
值,而不是list
,但我想不出其他想法......
使用d.values()
和in
:
>>> def get_value(d, value_want, value_know):
... return d[value_want] if value_know in d.values() else None
...
>>> d = {
"State": "CA",
"County": "Sonoma",
"Population": 900
}
>>> get_value(d, "State", "Sonoma")
'CA'
>>> get_value(d, "State", "Mendocino")
不確定我是否完全理解,但假設您有一個字典列表並希望獲得第一個符合您要求的字典:
這是一個使用迭代器的解決方案。 這意味着您不必測試任意長列表的所有元素:
d1 = {"State": "CA",
"County": "Sonoma",
"Population": 1200}
d2 = {"State": "XX",
"County": "Other",
"Population": 1200}
l = [d2, d1, d2, d2, d2, d2] # this could be infinite, here we want the second item
from itertools import dropwhile, islice
i = iter(l)
list(islice(dropwhile(lambda x: x['County'] != 'Sonoma', i), 1))[0]['State']
output: CA
如果您只想檢查您提供的值是否存在於值中,那么您可以像下面那樣進行。 當你有 value_know 時檢索所需的值。
d = {
"State": "CA",
"County": "Sonoma",
"Population": 900
}
def get_value(d, value_want, value_know):
return d[value_want] if value_know in d.values() else None
print(get_value(d, "State", "Sonoma"))
# CA
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.