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

时间:2018-07-08 17:16:44

标签: python

我写了一个Airbnb刮板,它遍历房屋列表的每个子页面到指定位置,并且每个子页面都返回zip对象,如下所示:

subpage = zip(names, prices)

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

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.

2 个答案:

答案 0 :(得分:1)

我对这个问题的看法:

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

答案 1 :(得分:1)

给出:

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]))