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)

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']

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']
添加回答
舉報