2012-04-05 42 views
3

任務是編寫一個程序,該程序提示輸入文件名,然後生成該文件的一致性。例如,一致性是一個按字母順序排列的索引,顯示每個單詞出現在文檔中的行。例如,本段的一致性可能如下所示:python中的一致性文件

Word   Line Number 
a    1 1 2 
alphabetical 1 
an   1 
appear  2 

這裏我列出一個列表,以便我可以對單詞進行排序。

我有這樣的代碼:

f = open(raw_input("Enter a filename: "), "r") 
myDict = {} 
linenum = 0 

for line in f: 
line = line.strip() 
line = line.lower() 
line = line.split() 
linenum += 1 

for word in line: 
    word = word.strip() 
    word = word.lower() 
    myDict[word] = linenum 

    if word in myDict: 
     myDict.sort() 
    else: 
     myDict.append(word) 

print "%-15s %-15s" %("Word", "Line Number") 
print "%-15s %-15d" %(myDict.keys(), myDict.values()) 

當我現在運行程序,它說「字典」有沒有屬性「排序」。你能解釋一下嗎?

該文件與示例相同,輸出也應該是上面的示例。我很新的python請幫忙:[

+0

這意味着正是它說。 Python字典是無序的,'dict'類型沒有排序方法。你可以做的是調用'.keys()'或'。在字典對象上使用values()'(取決於你想要哪一個),然後對結果進行排序。 – 2012-04-05 03:30:39

回答

2

我認爲使用字典是有意義的,但是您必須添加一個鍵以及添加到字典中的每個值。例如:

>>> dict = {} 
>>> dict["apple"] = "red" 
>>> dict["banana"] = "yellow" 
>>> dict 
{'apple': 'red', 'banana': 'yellow'} 

在此示例中,鍵爲「apple」和「banana」,值爲「紅色」和「黃色」。由於這是作業,我會留給你決定作業的適當鍵和值。

而且,這條線是有問題的:

for word in line: 

line是一個字符串,那麼你實際上在line看着每一個字符,而不是每一個字。您必須找到某種方法將line轉換爲單詞列表...

最後,您的最終陳述將只打印讀取的最後一個單詞。你正在編寫一個字典,但你不打印字典,你正在打印一個單一的值。一旦你建立字典,你應該打印字典本身。


myDict[word] = linenum 

if word in myDict: 
    myDict.sort() 
else: 
    myDict.append(word) 

你是在正確的道路上,但排序字典不是處理出現一次以上的話正確的方式(此外,字典沒有一種方法,這是爲什麼你會得到一個錯誤,但即使這樣做,你也不會在這裏需要它)。而且,一旦你爲一個鍵賦值,它會被添加到字典中,所以它已經被「附加」了。

在你的榜樣,一個出現3次,輸出列出每個出現在一行字,所以你需要一種方法來存儲每個字線的列表。

+0

謝謝你。我修好了它。我明白如果你不想更多地幫助我,我接受了你的答案,但是如果你不介意幫助我多一點,還是有一些困惑:] – 2012-04-05 02:37:21

+1

@KimY好吧,你正在改變線路,你選擇了一個好鑰匙。我會在我的回答中解決其他問題。 – Devourant 2012-04-05 02:50:57

+1

@KimY主要提示是「你需要每個單詞的行列表」。這可能是作業中最重要的部分,也是最不直觀的。數組/字典值不一定是靜態值... – Devourant 2012-04-05 03:24:43

1

你想myDict只是一個列表?如果是這樣,請將其聲明爲myDict = []。一個列表有排序和附加功能,但是字典沒有。

+0

感謝您的修復。當我再次運行程序時,它不會給出預期的輸出並打印完全不同的東西。 – 2012-04-05 02:01:35

+1

@KimY啊,那是因爲你的印刷聲明現在只印刷一個單數字和一個單獨的亞麻布。你會想要有一些循環遍歷myDict的元素並打印每一行。同樣,你會希望myDict實際上是一個字典(聲明爲{}),而不是myDict [word] .append(亞麻布)。您可能需要在該字典中將每個值初始化爲myDict [word] = [],然後才能追加。 – Squazic 2012-04-05 02:49:37

0

您可以輕鬆地這樣排序的字典的順序:

f = open(raw_input("Enter a filename: "), "r") 
myDict = {} 
linenum = 0 

for line in f: 
    line = line.strip() 
    line = line.lower() 
    line = line.split() 
    linenum += 1 

    for word in line: 
    word = word.strip() 
    word = word.lower() 

    if not word in myDict: 
     myDict[word] = [] 

    myDict[word].append(linenum) 


print "%-15s %-15s" %("Word", "Line Number") 
for key in sorted(myDict): 
    print '%-15s: %-15d' % (key, myDict(key)) 

希望它可以幫助 霍爾迪