2016-02-20 6 views
5

これはあまりにも簡単である場合、私は申し訳ありませんが、私はこの辞書を構築する方法を見つけ出すことはできません。回文と非回文の辞書?

ので

{"Bob": ["and"], "Anna": ["are", "meeting", "at"], "noon": []} 

私は私ができることが判明、私は

"Bob and Anna are meeting at noon" 

例えば、文字列を持っていると私は次のようではない、回文のリストを指しているすべての回文を持つ辞書をしたいです単語が回文であるかどうかをチェックする

word.lower() == word.lower()[::-1] 

そして、文字列を単語wiに分割することもできます

string.split() 

けど番目、私はどのように文字列をループに理解し、唯一の回文が鍵であると同時に、リストを作るように辞書を構築しません。このコードは動作するはず任意のヘルプ

+0

あなたが最高に合うと思う答えを受け入れるようにしてください! (もちろん、私の答え) –

+0

私はそれを読むために少し優れていると思うので、私は申し訳ありません – Flo

答えて

2

ため

ありがとう:

text = "Bob and Anna are meeting at noon" 
words = {} 
last_p = None 
for word in text.split(): 
    word2 = word.lower() 
    if word2 == word2[::-1]: 
     words[word] = [] 
     last_p = word 
    elif last_p: 
     words[last_p].append(word) 
print(words) 

最初の回文前の文のいずれかの単語がある場合、それらは無視されます。あなたは辞書内の項目は元の順序に滞在したい場合は、代わりに組み込みdictcollections.OrderedDictクラスを使用します。

+0

ありがとう、tjohnsonの答えを受け入れる、すべてのあなたの答えは、だからではなく、文字列の分割からの言葉をループさ – Flo

+0

を助けました...すべてのあなたの答えは – Flo

1
def is_palindrome(word): 
    return word.lower() == word.lower()[::-1] 


def task(string): 
    words = string.split(' ') 
    returned = dict() 
    i = 0 
    while i < len(words): 
     if is_palindrome(words[i]): # if palindrome 
      returned[words[i]] = [] 
      j = i + 1 
      while j < len(words) and not is_palindrome(words[j]): 
       returned[words[i]].append(words[j]) 
       j += 1 
     i += 1 
    return returned 

print(task("Bob and Anna are meeting at noon")) 

どのように動作するか理解してください。それは、あなた自身で時々理解する必要があるものの1つです。

また、それは辞書は最終結果のペアが異なって配置することができるように命じていないことを言及する価値があります。

+0

考えているはずです – Flo

1
from collections import OrderedDict 

s = "Bob and Anna are meeting at noon" 
d = OrderedDict() 
lastKey = None 

for i in s.split(): 
    if i.upper() == i.upper()[::-1]: 
    d[i] = [] 
    lastKey = i 
    else: 
    if lastKey: d[lastKey].append(i) 

print d 
+0

は、すべての答えは助け、ありがとう助け、ありがとう、私はその – Flo