如何按递减顺序排列链接(我有链接的值,(num_to_words(v)))



我当时正在制作网络爬虫,现在我需要一种排序算法,它可以按降序对我的链接进行排序,以查看哪个链接在这个网页中出现的次数最多。这是我用python编写的代码:

import requests
from bs4 import BeautifulSoup
from collections import defaultdict
all_links = defaultdict(int)
def webpages():
        url = 'http://www.hm.com/lv/department/MEN'
        source_code = requests.get(url)
        text = source_code.text
        soup = BeautifulSoup(text)
        for link in soup.findAll ('a', {'class':' ', 'rel':'nofollow'}):
            href = link.get('href')
            print(href)
            get_single_item_data(href)
        return all_links
def get_single_item_data(item_url):
    source_code = requests.get(item_url)
    text = source_code.text
    soup = BeautifulSoup(text)
    for link in soup.findAll('a'):
        href = link.get('href')
        if href and href.startswith('http://www.'):
            if href:
                all_links[href] += 1
            print(href)

webpages()
units = ["", "one", "two", "three", "four", "five",
         "six", "seven", "eight", "nine "]
teens = ["", "eleven", "twelve", "thirteen", "fourteen",
         "fifteen", 'sixteen', "seventeen", "eighteen", "nineteen"]
tens = ["", "ten", "twenty", "thirty", "forty",
        "fifty", "sixty", "seventy", "eighty", "ninety"]
thousands = ["", "thousand", "million", "billion", "trillion",
             "quadrillion", "quintillion", "sextillion", "septillion", "octillion",
             "nonillion", "decillion", "undecillion", "duodecillion", "tredecillion",
             "quattuordecillion", "sexdecillion", "septendecillion", "octodecillion",
             "novemdecillion", "vigintillion "]

def num_to_words(n):
    words = []
    if n == 0:
        words.append("zero")
    else:
        num_str = "{}".format(n)
        groups = (len(num_str) + 2) // 3
        num_str = num_str.zfill(groups * 3)
        for i in range(0, groups * 3, 3):
            h = int(num_str[i])
            t = int(num_str[i + 1])
            u = int(num_str[i + 2])
            print()
            print(units[i])
            g = groups - (i // 3 + 1)
            if h >= 1:
                words.append(units[h])
                words.append("hundred")
                if int(num_str) % 100:  # if number  modulo 100 has remainder  add "and" i.e one hundred and ten
                    words.append("and")
            if t > 1:
                words.append(tens[t])
                if u >= 1:
                    words.append(units[u])
            elif t == 1:
                if u >= 1:
                    words.append(teens[u])
                else:
                    words.append(tens[t])
            else:
                if u >= 1:
                    words.append(units[u])
            if g >= 1 and (h + t + u) > 0:
                words.append(thousands[g])
    return " ".join(words)
for k, v in webpages().items():
    print(k, num_to_words(v))

如果它们存储在数组中,则可以对数组进行排序
例如:

# Array 
a = [6, 2, 9, 3]
# sort the array 
a.sort() 

也许这个链接也会有所帮助:关于排序的链接

在python中使用排序函数。

内置函数排序帮助:(从python帮助复制)

sort(...)
    L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
    cmp(x, y) -> -1, 0, 1
(END) 

现在要进行反向排序,请使用以下命令:

>> L= [1,2,3,4]
>>> L.sort(reverse=True)
>>> L
[4, 3, 2, 1]
>>> 

您也可以使用自定义筛选器进行比较。

sort将创建一个就地排序,如果您不想这样做,请使用sorted

>>> L=[1,2,3,4]
>>> sorted(L,reverse=True)
[4, 3, 2, 1]
>>> L
[1, 2, 3, 4]
>>> 
dct = webpages()
for k  in sorted(dct,key=dct.get,reverse=True):
    print(k, num_to_words(dct[k]))

或者使用itemgetter对项目进行排序:

from operator import itemgetter
for k, v in sorted(webpages().items(),key=itemgetter(1),reverse=True):
    print(k, num_to_words(v))

最新更新