Отсортировать defaultdict в Python и его построчный вывод
Как можно реализовать построчный вывод defauldict'а - d, и отсортировать его по количеству значений в ключе, по убыванию соответственно?
from selenium import webdriver
import re
from collections import defaultdict
def get_data(url):
try:
driver = webdriver.Chrome('C:\Python26\Chromedriver')
driver.implicitly_wait(7)
driver.get(url)
page = 1
d = defaultdict(list)
while page < 10:
content = driver.find_element_by_id('dle-content')
for c in content.find_elements_by_class_name('news_boxing'):
b = c.find_element_by_class_name('stats')
if '+' in b.text:
try:
proc = float(re.findall("([+|-]\d+[.]\d+)%", b.text)[0])
if proc > 20:
match = c.find_element_by_class_name("commands")
stavka = c.find_element_by_class_name("info_match")
kf = c.find_element_by_xpath('//div[@class="prediction"]//a[@class="hover_block"]')
d[match.text].append(stavka.text)
#print("Повышенный прогноз: ", b.text, match.text, stavka.text, kf.text)
else:
match = c.find_element_by_class_name("commands")
stavka = c.find_element_by_class_name("info_match")
kf = c.find_element_by_xpath('//div[@class="prediction"]//a[@class="hover_block"]')
d[match.text].append(stavka.text)
#print(b.text, match.text, stavka.text, kf.text)
except:
continue
next = driver.find_element_by_xpath('//div[@class="next"]').click()
page += 1
except:
import traceback
print(traceback.format_exc())
finally:
driver.quit()
print(d)
def main():
url = 'https://vprognoze.ru/'
print(get_data((url)))
if __name__ == '__main__':
main()
Ответы (1 шт):
Автор решения: eri
→ Ссылка
sorted() сортирует любую последовательность по любому ключу.
from collections import defaultdict
d = defaultdict(list)
d['a'].append(1)
d['a'].append(2)
d['b'].append(3)
d['c'].append(1)
d['c'].append(2)
d['c'].append(3)
for k,v in sorted(d.items(), key= lambda i: len(i[1]), reverse=True):
print(k,v)
Вывод:
c [1, 2, 3]
a [1, 2]
b [3]