2017-01-17 21 views
-2

我有以下形式的字典列表:字典包含列表,但我得到「IndexError:列表索引超出範圍」當我試圖瞄準它

[{"Title": ["Harry Potter"], "Author": ["J.K.Rowling"]}, 
{"Title": ["Lord of the Rings"], "Author": ["J.R.R. Tolkien"]}] 

我試圖將它寫入使用以下代碼的csv文件:

for dic in lis: 
    title = dict["Title"][0] 
    author = dict["Author"][0] 

    csvWriter.writerow([title, author]) 

但是我收到一個IndexError,說我的列表索引超出範圍。但是,如果我從我的dict [「Title」]結尾刪除[0] ...,那麼它會將一個列表放入我的csv文件中。

更加混亂,如果我嘗試的項目編碼:

dict["Author"].encode('utf-8') 

它說了一句「列表對象沒有方法,解碼()」

這絕對是一個列表。 ..爲什麼我得到這個錯誤?

我使用python 2.7

編輯:

所以這個例子是什麼,我實際上是在處理一個簡化版本。我用scrapy颳了一個網站,並且已經返回了一個json文件。解碼後的json文件是包含包含更多列表的字典的列表。

items.json:

[{"Title": ["Harry Potter"], "Author": ["J.K.Rowling"]}, 
{"Title": ["Lord of the Rings"], "Author": ["J.R.R. Tolkien"]}] 

我的代碼:

import json 
import csv 


with open('items.json', 'r') as f: 
    op = f.read() 
    json = json.loads(op) 


with open("data.csv", "wb") as f: 
    csvWriter = csv.writer(f) 
    csvWriter.writerow(['title', 'author']) 

    for dic in json: 
     title = dic['Title'][0] 
     author = dic['Author'][0] 

     csvWriter.writerow([title, author]) 

當我運行這段代碼,我得到IndexError

+2

請提供[MCVE] - 可複製粘貼以解釋並公開您的問題的內容。 –

+0

您的csvWriter.writerow方法顯然期望列表的列表,因爲之前的所有內容都運行時沒有錯誤。您可以在調試器中查看它們,以確定它們與您的預期完全相同,直到那一刻。 –

+0

也儘量不要使用類名作爲變量名。 –

回答

0

參數來cscWriter.writerow應該是列表的列表。 https://docs.python.org/2/library/csv.html 如果你想編碼,使用方法: 字典[ 「作者」] [0] .encode( 'UTF-8')

+0

我試過這個,它給了我一個IndexError,它說列表索引超出範圍 –

0

想通了這個問題。

埋在我的json文件中的是空列表。起初我沒有看到他們,但我的程序找到了他們。此問題已解決

相關問題