代码之家  ›  专栏  ›  技术社区  ›  Slippy

Python数组排序价格错误

  •  0
  • Slippy  · 技术社区  · 1 年前

    我已经制作了一个带有描述和价格的数组,但似乎无法获得按价格排序的排序符号。有人能帮助或指导我为什么不能正确地按价格排序吗?我已经核对了型号的价格,它是浮动的。据我所知,它应该是有效的。我也没有出错。但是,输出没有按价格排序/

    构建阵列

    import array 
    newlist = []
    for d in products:
        desc =d.description
        price=d.price
        #print(type(price))
        newlist.append(f"{desc}:{price}")
    

    newlist输出

    ['Coors Light American-style Light Lager Beer:16.99', 'Coors Light American-style Light Lager Beer:26.99', 'Michelob ULTRA Superior Light Domestic Lager Beer:18.99', 'Samuel Adams Summer Ale Seasonal Beer:19.99', 'Miller Lite American Pilsner Light Lager Beer:22.99', 'Miller Lite American Pilsner Light Lager Beer:26.99', 'Michelob ULTRA Superior Light Domestic Lager Beer:26.99', 'Bud Light Lager Beer:32.99', 'Samuel Adams Summer Ale Seasonal Beer:10.99', 'Michelob ULTRA Superior Light Domestic Lager Beer:33.99', 'Busch Light Domestic Lager Beer:31.99', 'Michelob ULTRA Superior Light Domestic Lager Beer:26.99', 'Coors Banquet American Lager Beer:16.99', 'Stella Artois Premium Lager Beer:20.99', 'Michelob ULTRA Superior Light Domestic Lager Beer:34.99', "Leinenkugel's Summer Shandy Craft Beer:19.99", 'Coors Light American-style Light Lager Beer:22.99', 'Blue Moon Belgian-Style Ale White Wheat Beer:19.99', 'Blue Moon Belgian-Style Ale White Wheat Beer:19.99', 'Heineken Original Lager Beer, 12 Pack, 12 fl oz Bottles:20.99']
    

    尝试按价格排序

    import operator
    getcount = itemgetter(int(1))
    list(map(getcount, newlist))
    sortedlist = sorted(newlist, key=getcount)
    
    for l in sortedlist:
        print(l)
    

    输出

    Samuel Adams Summer Ale Seasonal Beer:10.99
    Leinenkugel's Summer Shandy Craft Beer:19.99
    Heineken Original Lager Beer, 12 Pack, 12 fl oz Bottles:20.99
    Michelob ULTRA Superior Light Domestic Lager Beer:18.99
    Miller Lite American Pilsner Light Lager Beer:22.99
    Miller Lite American Pilsner Light Lager Beer:26.99
    Michelob ULTRA Superior Light Domestic Lager Beer:26.99
    Michelob ULTRA Superior Light Domestic Lager Beer:33.99
    Michelob ULTRA Superior Light Domestic Lager Beer:26.99
    Michelob ULTRA Superior Light Domestic Lager Beer:34.99
    Blue Moon Belgian-Style Ale White Wheat Beer:19.99
    Blue Moon Belgian-Style Ale White Wheat Beer:19.99
    Dos Equis Mexican Lager Beer, 12 Pack, 12 fl oz Bottles:19.99
    Coors Light American-style Light Lager Beer:16.99
    Coors Light American-style Light Lager Beer:26.99
    Coors Banquet American Lager Beer:16.99
    Coors Light American-style Light Lager Beer:22.99
    Stella Artois Premium Lager Beer:20.99
    Bud Light Lager Beer:32.99
    Busch Light Domestic Lager Beer:31.99
    
    2 回复  |  直到 1 年前
        1
  •  4
  •   L Tyrone Ali    1 年前

    也许先尝试排序,然后转换为字符串:

    sortedlist = sorted(products, key=lambda d: d.price)
    newlist = []
    for d in sortedlist:
        desc =d.description
        price=d.price
        newlist.append(f"{desc}:{price}")
    print(newlist)
    
        2
  •  -2
  •   user24714692    1 年前

    可以使用lambda函数作为 key :

    def _sort(products):
        newlist = [(d["description"], d["price"]) for d in products]
        return sorted(newlist, key=lambda x: x[1])
    
    
    L = [
        {"description": "Coors Light American-style Light Lager Beer", "price": 16.99},
        {"description": "Coors Light American-style Light Lager Beer", "price": 26.99},
        {"description": "Michelob ULTRA Superior Light Domestic Lager Beer", "price": 18.99}
    ]
    
    print(_sort(L))
    
    
    

    打印

    [('Coors Light American-style Light Lager Beer', 16.99), ('Michelob ULTRA Superior Light Domestic Lager Beer', 18.99), ('Coors Light American-style Light Lager Beer', 26.99)]