2016-11-17 59 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)打败了。