2015-10-01 18 views
9

Böyle bir şey olup olmadığını bilmiyorum - ama ben düzenli bir dict anlama yapmaya çalışıyorum. Ancak işe yaramıyor mu? Şimdilik normal dict anlama olarak kalanOrderedDict anlayışı var mı?

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 } 

(Ben de çorba boilerplate olağan istekleri dışında bıraktım). Herhangi bir fikrin var mı?

+1

Hayır, bir OrderedDict anlama diye bir şey yoktur, sadece normal bir sözlüğü olsun. Bu isme daha önce bir OrderedDict atamış olmanız ilgisizdir. – jonrsharpe

+0

Boş bir dict yaratma ve sonra bir OrderedDict veya herhangi bir dict ile bir dict comp ile öğeleri ekleyerek böyle bir şey yok, bir kez sen ismini tekrar adlandırdı 't_data' artık o OrderedDict –

cevap

25

OrderedDict ile doğrudan bir anlama yapamazsınız. Bununla birlikte, OrderedDict için kurucuda bir jeneratör kullanabilirsiniz.

boyutu için bu konuda deneyin:

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

Superb için puan, teşekkürler Bunu düşündüğüm için – Yunti

+0

Sevindim! Bunu yeni kendim keşfettim. –