2010-05-24 65 views
-2

我有這種代碼打印在infile行號,但也在文字linenumber我做什麼只打印旁邊的單詞文本文件的行號???在txtfile和list中打印行號?

d = {} 
counter = 0 
wrongwords = [] 
for line in infile: 
infile = line.split() 
wrongwords.extend(infile) 
counter += 1 
for word in infile: 
    if word not in d: 
     d[word] = [counter] 
    if word in d: 
     d[word].append(counter) 

的東西在wrongwords: 打印(東東,d [東東])

輸出爲:

hello [1, 2, 7, 9] # this is printing the linenumber of the txt file 
hello [1] # this is printing the linenumber of the list words 
hello [1] 
what i want is: 
hello [1, 2, 7, 9] 
+0

從你的問題,目前還不清楚你想達到什麼目的?你是否想找到一個單詞出現的行號? 另外這行看起來可疑對我說: 如果Word不是在d: d [文字] = [計數器]如果字d : d [文字] .append(計數器) 您檢查單詞在字典使用計數器初始化列表,如果檢查將計數器添加到創建的列表,則立即進行下一步。可能你需要別的東西來代替「if in word in d」 – sateesh 2010-05-24 07:50:36

+0

你有5個問題關於這段代碼的不同問題,並且得到了很多非常詳細的幫助。其中3個已被標記爲家庭作業。我認爲這個問題應該關閉。 – 2010-05-24 08:40:49

+0

其不同的代碼ive詢問有關涉及不同代碼的同一事物的使用情況 – jad 2010-05-24 08:52:20

回答

0

四件事情:

  1. 你可以保持通過執行此操作來跟蹤行號,而不是自行處理 計數器:

    for line_no, word in enumerate(infile): 
    
  2. 正如sateesh上文所指出的,你可能需要在你的 條件的else

    if word not in d: 
        d[word] = [counter] 
    else: 
        d[word].append(counter) 
    
  3. 還要注意的是,上面的代碼片段正是defaultdict s爲 爲:

    from collections import defaultdict 
    d = defaultdict(list) 
    

    然後在你的主循環中,你可以擺脫if..else部分:

    d[word].append(counter) 
    
  4. 你爲什麼要這麼做wrongwords.extend(infile)

另外,我真的不明白你應該怎麼決定什麼是「錯誤的詞」。我假設你有一個名爲wrongwords包含錯誤的言論集,這使得最終的代碼是這樣的:

from collections import defaultdict 
d = defaultdict(list) 
wrongwords = set(["hello", "foo", "bar", "baz"]) 
for counter, line in enumerate(infile): 
    infile = line.split() 
    for word in infile: 
     if word in wrongwords: 
      d[word].append(counter)