2016-01-05 183 views
-4

因此,我正在寻找方法来查找键/值是否存在于字符串中,但我没有找到任何允许我访问在字符串中找到的键/值的好例子。在Python中查找字符串中是否存在字典值?

基本上,我有一个字符串。比方说:

body = "Hi my name is John" 

...我有以下解释:

names = {"John": "John", "Bill": "Bill", "Jordan": "Jordan"} 

我想看看是否有任何在字典中的名称都包含在字符串中,如果是这样,我想知道它是哪一个(把它分配给一个变量或什么)。

+1

你到目前为止尝试过什么?你知道如何搜索字符串中的单词吗?你知道如何从字典中获得键或值的列表吗? –

+0

为什么'names'是一个字典,其值与键相同? –

+0

卡尔森的回应奏效。我的键与值相同,因为我需要O(1)查找时间的字典。列表是否在Python中提供了这个? – Matt

回答

-1

这会给你出现在body名称的列表:

[name for name in names if name in body] 

有一本字典,其中键总是等于价值似乎有些不理想。

+0

我认为对于刚刚学习python的人来说,该解决方案会显得乱七八糟。您可能想要添加更多解释。也许从传统名单开始,然后展示如何将它们折叠成理解。然后,用实际数据展示一个完整的工作示例。 –

+0

谢谢!我只需要即时查找时间来检查存在。我不确定List是否在Python中提供了这一点。 – Matt

+0

我认为这几乎像英文,这是Python的美丽的一部分。这是过滤的一种非常pythonic的方式,即使是初学者也有什么错误? – karlson

0

这里不需要使用字典,因为这些键看起来与值相同:使用集合。在通常的情况下,键中可能有空格(甚至当键不存在时),您可能会发现将主题文本拆分为单独的单词更容易,您可以使用方法执行此操作。所以你可以做如下的事情。

body = "Hi my name is John" 
names = {"John", "Bill", "Jordan"} 
for word in body.split(): 
    if word in names: 
     print(word) 

这避免了通过串一路搜索,并很可能会有所加快,以及使你的代码更清晰一点的意图。

+0

但是,每次找到匹配时都会打印所有名称。我不相信这是OP的意图。你可能意思是'print(word)'而不是'print(names)' – karlson

+0

谢谢。修复。 – holdenweb

0

如果我假设你已经映射在字典中是有原因的,我会告诉你,是的,它是可以利用的方式的映射是这样的:

class bodyTests(): 
     def __init__(self): 
      self.nameMap = {"John": "Johnathon", "Johnathon": "Johnathon", "Bill": "William", "Wil": "William"} 
      self.greetMap = {"Hi": "Hello", "aloha": "Hello", "Hello": "Hello", "Salutations": "Greetings"} 

     def find(self, lookfor, searchin): 
      return set(lookfor.get(x) for x in lookfor.viewkeys() & searchin.split()) 

     def findGuys(self, abody): 
      return self.find(self.nameMap, abody) 

     def findGreets(self, abody): 
      return self.find(self.greetMap, abody) 


    body = "Hi my name is John\nPlease call me John\nI wish I was named Bill" 
    foundnames = bodyTests().findGuys(body) 
    foundgreets = bodyTests().findGreets(body) 
    print "python set of names: ", foundnames 
    print "python set of greets: ", foundgreets 
    print "let's dump them all out: " 
    for s in foundnames: 
     print s 
    for s in foundgreets: 
     print s 
    exit() 

蟒蛇套名称:集([ '威廉', '乔纳森'])
蟒蛇集映入眼帘的:一套([ '你好'])
让我们甩掉他们全力以赴:
威廉
乔纳森
你好

相关问题