2015-10-01 14 views
9

Non so se esiste una cosa del genere - ma sto cercando di fare una comprensione del ditt ordinato. Tuttavia non sembra funzionare?Esiste una comprensione OrderedDict?

import requests 
from bs4 import BeautifulSoup 
from collections import OrderedDict 


soup = BeautifulSoup(html, 'html.parser') 
tables = soup.find_all('table') 
t_data = OrderedDict() 
rows = tables[1].find_all('tr') 
t_data = {row.th.text: row.td.text for row in rows if row.td } 

E 'rimasto come un normale comprensione dict per ora (ho anche lasciato fuori le solite richieste al testo standard zuppa). Qualche idea?

+1

No, non c'è alcuna cosa come una comprensione OrderedDict, basta avere un normale dizionario. Il fatto che tu abbia precedentemente assegnato un OrderedDict a quel nome è irrilevante. – jonrsharpe

+0

Non esiste una cosa come la creazione di un dict vuoto e quindi l'aggiunta di elementi con un comp dict con un OrderedDict o qualsiasi dict, una volta rebindato il nome 't_data' non è più indicato per OrderedDict –

risposta

25

Non è possibile eseguire direttamente una comprensione con OrderedDict. Tuttavia, è possibile utilizzare un generatore nel costruttore per OrderedDict.

Prova questo per il formato:

import requests 
from bs4 import BeautifulSoup 
from collections import OrderedDict 


soup = BeautifulSoup(html, 'html.parser') 
tables = soup.find_all('table') 
rows = tables[1].find_all('tr') 
t_data = OrderedDict((row.th.text, row.td.text) for row in rows if row.td) 
+0

Superbo, grazie dovrei avere pensavo che fosse lo – Yunti

+0

Felice di poterti aiutare! L'ho appena scoperto di recente da solo. –