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

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

如何從列表字典的值中獲取所有鍵?

如何從列表字典的值中獲取所有鍵?

LEATH 2021-07-01 09:47:33
我有一本這樣格式的字典d = {    "Fruit_1" : ["mango", "apple"],    "Fruit_2" : ["apple"],    "Fruit_3" : ["mango", "banana", "apple", "kiwi", "orange"]}我將一個值作為“芒果”傳遞,并且我想獲取所有只出現芒果的對應鍵。我無法在值發生的地方獲得相應的鍵。
查看完整描述

3 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

你也許可以這樣做:


d = {

    "Fruit_1" : ["mango", "apple"],

    "Fruit_2" : ["apple"],

    "Fruit_3" : ["mango", "banana", "apple", "kiwi", "orange"]

}


# list comprehension

mango_keys = [fruit for fruit in d.keys() if "mango" in d[fruit]]

print(mango_keys)       



# ['Fruit_1', 'Fruit_3']         



# or more traditional for-loop (but non pythonic)


for fruit in d.keys():

    if "mango" in d[fruit]:

        print(fruit)


查看完整回答
反對 回復 2021-07-06
?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

迭代d.items并檢查mango值的存在。


In [21]: [key for key,value in d.items() if 'mango' in value]

Out[21]: ['Fruit_1', 'Fruit_3']


查看完整回答
反對 回復 2021-07-06
?
當年話下

TA貢獻1890條經驗 獲得超9個贊

幼稚的方法(遍歷所有項目并尋找結果)有效但具有很高的復雜性,主要是在您必須執行大量請求時。你可以通過用lista替換你的值來稍微改進它set(為了更快的in查找),但這仍然會很慢(O(n**2)=>O(n)但還有改進的空間)。


如果您希望能夠多次執行這些查詢,最好重建字典,以便在構建后查找非??欤褂?collections.defaultdict


d = {

    "Fruit_1" : ["mango", "apple"],

    "Fruit_2" : ["apple"],

    "Fruit_3" : ["mango", "banana", "apple", "kiwi", "orange"]

}


import collections


newd = collections.defaultdict(list)


for k,vl in d.items():

    for v in vl:

        newd[v].append(k)


print(newd)

print(newd["mango"])

這是重建的字典:


defaultdict(<class 'list'>, {'apple': ['Fruit_2', 'Fruit_3', 'Fruit_1'], 'orange': ['Fruit_3'], 'banana': ['Fruit_3'], 'kiwi': ['Fruit_3'], 'mango': ['Fruit_3', 'Fruit_1']})

這是對“芒果”的查詢:


['Fruit_3', 'Fruit_1']


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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