2016-08-01 37 views
0

我無法看到打印結果的模式。我已經嘗試過這種其他的解決方案,但無法得到它的權利=(我怎樣才能像原始字符串這樣的字典排序?

s = "hi hi hi, how are you? you you" 

print(s) 
s = s.replace('?','') 
s = s.replace('!','') 
s = s.replace(',','') 
s = s.replace('.','') 

l = s.split() 

d = {} 

for i, termo in enumerate(l): 
    if not d.get(termo): 
     d[termo] = [] 
    d[termo].append(i+1) 

print ('d:', d) 

輸出示例:

d: {'you': [6, 7, 8], 'how': [4], 'are': [5], 'hi': [1, 2, 3]} 

d: {'are': [5], 'hi': [1, 2, 3], 'how': [4], 'you': [6, 7, 8]} 
+3

詞典本質上是無序的。使用'collections.OrderedDict'。 –

+0

你的目標是什麼?該輸出是預期的輸出還是期望的輸出? – James

+2

請閱讀http://stackoverflow.com/questions/15479928/why-is-the-order-in-python-dictionaries-and-sets-arbitrary – cdarke

回答

0

字典是無序集合使用collections.OrderedDict,而不是:

from collections import OrderedDict 

s = "hi hi hi, how are you? you you" 
s = s.translate(None, '?!,.') 
l = s.split() 

d = OrderedDict() 
for i, termo in enumerate(l): 
    d.setdefault(termo, []).append(i) 

print ('d:', d) 

注:

  • collectins.OrderedDict記得添加數據的順序。隨後字典的迭代以相同的順序發生。

  • str.translate()是從字符串中刪除一類字符的一種快速方法。

  • dict.setdefault()如果密鑰存在,則返回字典的值,否則返回值。它取代了if x not in d: d[x] = y模式。

+0

羅布,非常感謝你! =)這正是我需要的,我現在明白了! –

相關問題