簡體   English   中英

在不知道其密鑰的情況下從字典中獲取價值的簡單解決方案

[英]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.

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