2016-11-17 70 views
-2

我是python的初學者,想知道這是否可能?將字典中的鍵放到基於其他列表的新列表中

businessideas = { 
"DeliDelivery": ['bread'], 
"Ikea": ['sofa','table'], 
'Volvo': ['car','window'], 
'saab' : ['window'] 
} 




carkeywords = ['car', 'engine'] 
furniturekeywords = ['sofa', 'bookshell'] 
bakerykeywords = ['bread', 'flour', 'cookies'] 

carkeywords_competitors = [] 
furniturekeywords_competitors = [] 
bakerykeywords_competitors = [] 

我希望創建一個使每個字典的關鍵在競爭對手的名單,如果他們有一個共同的值的函數。所以舉個例子,關鍵的宜家傢俱有沙發和桌子。然後函數應該看到沙發的價值是傢俱關鍵字元素的重複。然後功能應該把關鍵宜家列入furniturekeywords_competitors列表中。如果它具有與carkeywords相同的值,那麼該函數會將關鍵字放在carkeywords_competitors中。

+0

歡迎來到StackOverflow。是的,這是可能的。但是,您的*實際*問題並不清楚。請閱讀並遵守幫助文檔中的發佈準則。 [最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)適用於此處。在您發佈代碼並準確描述問題之前,我們無法有效幫助您。 – Prune

+0

[計算兩個列表的相似度](http://stackoverflow.com/questions/6709693/calculating-the-similarity-of-two-lists) –

+0

可能的重複[如何在python中比較兩個列表並返回匹配](http://stackoverflow.com/questions/1388818/how-can-i-compare-two-lists-in-python-and-return-matches) –

回答

2

因此,任務是找到那些與關鍵字不相交的項目集合。

businessideas = { 
"DeliDelivery": ['bread'], 
"Ikea": ['sofa','table'], 
'Volvo': ['car','window'], 
'saab' : ['window'] 
} 

carkeywords = ['car', 'engine'] 

def competitors(ideas, keywords): 
    keywords = set(keywords) 
    return [k for k,v in ideas.items() 
      if not keywords.isdisjoint(v)] 

carkeywords_competitors = competitors(businessideas, carkeywords) 

結果:這可以用set S和isdisjoint方法來完成

>>> carkeywords_competitors 
['Volvo'] 

注意,如果列表中的元素不是哈希的,但確實有平等的定義對他們來說,any(i in kwds for i in v)就是我會用的。 (如果他們沒有平等,任務將不可能,唯一的選擇將是False)但是他們是可散列的,因爲他們是字符串。所以not set(v).isdisjoint(kwds)打敗了。

相關問題