如何按指定的条件对zip对象列表进行排序?

2024-04-19 08:26:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个Airbnb scraper,它遍历指定位置的每个主页列表子页,并为每个子页返回zip对象,如下所示:

subpage = zip(names, prices)

在抓取单个子页面之后,我将subpagezip对象添加到一个列表中:

all_subpages.append(subpage)

最后all_subpages是一个zip对象列表,每个对象包含一个子页面的数据。你知道吗

我的问题是我想以HTML表格的形式显示来自all_subpages的数据,并希望这些数据按价格排序。你知道吗

所以我的问题是:如何打印按价格订购的all_subpages的内容?你知道吗

预期产量:

    Name                 Price
    Apartment 3          10 GBP
    Apartment 1          15 GBP
    Apartment 2          20 GBP

    etc.

Tags: 数据对象列表价格主页页面allzip
2条回答

我对这个问题的看法是:

from itertools import chain

names = ['78', '1', '3']
prices = ['15', '20', '10']

names2 = ['82', '11', '33']
prices2 = ['1', '2', '100']

all_subpages = []

subpage = zip(names, prices)
all_subpages.append(subpage)

subpage2 = zip(names2, prices2)
all_subpages.append(subpage2)

print('Home number\tprice')
for (name, price) in sorted(chain.from_iterable(all_subpages), key=lambda v: int(v[1])):
    print(f'{name}\t\t{price} GBP')

输出:

 Home number    price
82      1 GBP
11      2 GBP
3       10 GBP
78      15 GBP
1       20 GBP
33      100 GBP

给出:

l1=["Apartment 1", "Apartment 3","Apartment 2"]
l2=['15 GBP','10 GBP','20 GBP'] 

您可以按字典顺序对第二个元素进行排序,如下所示:

>>> sorted(zip(l1,l2), key=lambda t: t[1])
[('Apartment 3', '10 GBP'), ('Apartment 1', '15 GBP'), ('Apartment 2', '20 GBP')]

如果你想要同样的数字,你可以这样做:

>>> sorted(zip(l1,l2), key=lambda t: float(t[1].split()[0]))

相关问题 更多 >