2015-06-15 3 views
0

Следующий код дает мне вывод, как показано ниже. Я хотел бы взять каждый из чисел, следующих за соответствующей категорией, и поместить их в словарь. Каков эффективный способ сделать это?Создать словарь из списка элементов

Текущий код:

d = {} 
data = [] 

contentB = tree.xpath("//table[@class='yfnc_tabledata1']/tr[1]/td/table/tr/td") 

for a in contentB: 
    a = a.text_content().strip() 
    data.extend(a.splitlines()) 

for item in data: 

    if re.match(r'\(\d+', item) is not None: 
     item = item.replace('(', '-').replace(')', '') 

     print(item) 

Выход

Period Ending 
Total Revenue 
31821000 
30871000 
29904000 
Cost of Revenue 
16447000 
16106000 
15685000 
Gross Profit 
15374000 
14765000 
14219000 
Operating Expenses 
Research Development 
1770000 
1715000 
1634000 

желаемого результата

{ 
    'Total Revenue': [31821000, 30871000, 29904000], 
    'Cost of Revenue': [16447000, 16106000, 15685000], 
    'Gross Profit': [15374000, 14765000, 14219000] 
} 
+0

Являются ли блоки заголовка/номера всегда группами по три? –

ответ

0

Что-то вроде этого:

output = {} 
current_key = None 
for item in data: 
    if re.match(r'\(\d+', item) is None: 
     current_key = item.replace('(', '-').replace(')', '') 
     output[current_key] = [] 
    else: 
     if current_key: 
      output[current_key].append(int(item.replace(',', ''))) 

print output 
+0

'ValueError: недействительный литерал для int() с базой 10:« Чистый доход от непрерывных операций » –

+0

Извините, я отредактировал ответ –

0

Как и ответ @Eugene Soldatov, я попытался автоматически идентифицировать перерывы данных. Я использую пакет locale, хотя, поскольку ваши данные, похоже, используют запятые для разделения единиц. Возможно, вам придется настроить вторую строку на свой язык. Непроверено, потому что я не использую языковой стандарт с этим форматированием ;-)

import locale 
#locale.setlocale(locale.LC_ALL, 'en_US.UTF8') 

summary = {} 
current_key = None 
for line in data: 
    try 
     if current_key: 
      summary[current_key].append(locale.atoi(line.strip())) 
    except ValueError: 
     current_key = line.strip() 
     summary[current_key] = [] 
+0

Я недавно обновил данные и превратил все числа в целые числа –

+0

Я думаю, что пример кода должен работать без установки языкового стандарта. –

Смежные вопросы