2016-01-05 80 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() 

蟒蛇套名稱:集([ '威廉', '喬納森'])
蟒蛇集映入眼簾的:一套([ '你好'])
讓我們甩掉他們全力以赴:
威廉
喬納森
你好

相關問題