【问题标题】:Sorting A List Of Dictionaries Not Working Properly With Doubles [duplicate]对无法正常使用双打的字典列表进行排序[重复]
【发布时间】:2019-07-21 05:26:33
【问题描述】:

我有一个这样的字典列表:

<class 'list'>: [{'shop': 'Eneba', 'price': '47.09'}, {'shop': 'HRKGAME', 'price': '47.99'}, {'shop': 'G2PLAY', 'price': '48.92'}, {'shop': 'Gamebillet', 'price': '49.29'}, {'shop': 'Instant Gaming', 'price': '49.34'}, {'shop': 'G2PLAY', 'price': '49.49'}, {'shop': 'GamingDragons', 'price': '49.57'}, {'shop': 'GAMIVO', 'price': '49.72'}, {'shop': 'GAMIVO', 'price': '50.05'}, {'shop': 'Cdkeys.com', 'price': '50.09'}, {'shop': 'G2PLAY', 'price': '50.38'}, {'shop': 'Kinguin', 'price': '50.48'}, {'shop': 'GAMIVO', 'price': '50.83'}, {'shop': 'Kinguin', 'price': '51.07'}, {'shop': 'IGVault', 'price': '51.26'}, {'shop': 'Mmoga', 'price': '51.45'}, {'shop': 'GreenmanGaming', 'price': '51.59'}, {'shop': 'Kinguin', 'price': '51.99'}, {'shop': '2Game', 'price': '53.99'}, {'shop': 'DLGamer', 'price': '55.19'}, {'shop': 'G2A.COM', 'price': '56.79'}, {'shop': 'G2A.COM', 'price': '57.26'}, {'shop': 'GamesRocket', 'price': '57.60'}, {'shop': 'G2PLAY', 'price': '58.80'}, {'shop': 'GamersGate', 'price': '59.99'}, {'shop': 'Kinguin', 'price': '60.67'}, {'shop': 'Gamesdeal', 'price': '65.24'}, {'shop': 'Gamebillet', 'price': '74.68'}, {'shop': 'Cdkeys.com', 'price': '76.49'}, {'shop': 'Instant Gaming', 'price': '76.74'}, {'shop': 'GreenmanGaming', 'price': '77.39'}, {'shop': 'G2PLAY', 'price': '77.70'}, {'shop': 'Kinguin', 'price': '80.18'}, {'shop': '2Game', 'price': '80.99'}, {'shop': 'Mmoga', 'price': '82.32'}, {'shop': 'DLGamer', 'price': '82.79'}, {'shop': 'GAMIVO', 'price': '82.87'}, {'shop': 'Gamebillet', 'price': '82.98'}, {'shop': 'Instant Gaming', 'price': '83.01'}, {'shop': 'HRKGAME', 'price': '83.49'}, {'shop': 'G2A.COM', 'price': '84.24'}, {'shop': 'Cdkeys.com', 'price': '84.49'}, {'shop': 'G2PLAY', 'price': '85.15'}, {'shop': 'G2A.COM', 'price': '85.92'}, {'shop': 'GreenmanGaming', 'price': '85.99'}, {'shop': 'GamesRocket', 'price': '86.02'}, {'shop': 'G2A.COM', 'price': '86.51'}, {'shop': 'Kinguin', 'price': '87.87'}, {'shop': 'GAMIVO', 'price': '88.40'}, {'shop': 'GamersGate', 'price': '89.99'}, {'shop': '2Game', 'price': '89.99'}, {'shop': 'G2PLAY', 'price': '90.48'}, {'shop': 'G2PLAY', 'price': '91.54'}, {'shop': 'DLGamer', 'price': '91.99'}, {'shop': 'HRKGAME', 'price': '92.52'}, {'shop': 'Kinguin', 'price': '93.36'}, {'shop': 'Kinguin', 'price': '94.46'}, {'shop': 'GamesRocket', 'price': '94.68'}, {'shop': 'Gamesdeal', 'price': '97.87'}, {'shop': 'GamersGate', 'price': '99.99'}, {'shop': 'G2PLAY', 'price': '100.59'}, {'shop': 'Kinguin', 'price': '103.80'}, {'shop': 'G2A.COM', 'price': '105.86'}, {'shop': 'Gamesdeal', 'price': '108.75'}, {'shop': 'Play', 'price': '42.93'}, {'shop': 'GamingDragons', 'price': '66.45'}, {'shop': 'GameStop', 'price': '89.99'}, {'shop': 'GameStop', 'price': '259.99'}, {'shop': 'PSNGAMES', 'price': '44.46'}, {'shop': 'Play', 'price': '45.12'}, {'shop': 'G2A.COM', 'price': '53.49'}, {'shop': 'Press', 'price': '59.21'}, {'shop': 'Instant Gaming', 'price': '59.21'}, {'shop': 'GAMIVO', 'price': '60.77'}, {'shop': 'Mmoga', 'price': '62.88'}, {'shop': 'Cdkeys.com', 'price': '63.99'}, {'shop': 'GamingDragons', 'price': '66.45'}, {'shop': 'GAMIVO', 'price': '82.87'}, {'shop': 'Cdkeys.com', 'price': '84.49'}, {'shop': 'Instant Gaming', 'price': '87.07'}, {'shop': 'Press', 'price': '87.07'}, {'shop': 'GameStop', 'price': '89.99'}, {'shop': 'Mmoga', 'price': '91.47'}, {'shop': 'GAMIVO', 'price': '93.93'}, {'shop': 'Cdkeys.com', 'price': '104.29'}, {'shop': 'GameStop', 'price': '259.99'}]

我是这样排序的:

sortedlist = sorted(shop_price_array, key=lambda k: k['price'])

由于某种原因,我的列表最终是这样的:

<class 'list'>: [{'shop': 'G2PLAY', 'price': '100.59'}, {'shop': 'Kinguin', 'price': '103.80'}, {'shop': 'Cdkeys.com', 'price': '104.29'}, {'shop': 'G2A.COM', 'price': '105.86'}, {'shop': 'Gamesdeal', 'price': '108.75'}, {'shop': 'GameStop', 'price': '259.99'}, {'shop': 'GameStop', 'price': '259.99'}, {'shop': 'Play', 'price': '42.93'}, {'shop': 'PSNGAMES', 'price': '44.46'}, {'shop': 'Play', 'price': '45.12'}, {'shop': 'Eneba', 'price': '47.09'}, {'shop': 'HRKGAME', 'price': '47.99'}, {'shop': 'G2PLAY', 'price': '48.92'}, {'shop': 'Gamebillet', 'price': '49.29'}, {'shop': 'Instant Gaming', 'price': '49.34'}, {'shop': 'G2PLAY', 'price': '49.49'}, {'shop': 'GamingDragons', 'price': '49.57'}, {'shop': 'GAMIVO', 'price': '49.72'}, {'shop': 'GAMIVO', 'price': '50.05'}, {'shop': 'Cdkeys.com', 'price': '50.09'}, {'shop': 'G2PLAY', 'price': '50.38'}, {'shop': 'Kinguin', 'price': '50.48'}, {'shop': 'GAMIVO', 'price': '50.83'}, {'shop': 'Kinguin', 'price': '51.07'}, {'shop': 'IGVault', 'price': '51.26'}, {'shop': 'Mmoga', 'price': '51.45'}, {'shop': 'GreenmanGaming', 'price': '51.59'}, {'shop': 'Kinguin', 'price': '51.99'}, {'shop': 'G2A.COM', 'price': '53.49'}, {'shop': '2Game', 'price': '53.99'}, {'shop': 'DLGamer', 'price': '55.19'}, {'shop': 'G2A.COM', 'price': '56.79'}, {'shop': 'G2A.COM', 'price': '57.26'}, {'shop': 'GamesRocket', 'price': '57.60'}, {'shop': 'G2PLAY', 'price': '58.80'}, {'shop': 'Press', 'price': '59.21'}, {'shop': 'Instant Gaming', 'price': '59.21'}, {'shop': 'GamersGate', 'price': '59.99'}, {'shop': 'Kinguin', 'price': '60.67'}, {'shop': 'GAMIVO', 'price': '60.77'}, {'shop': 'Mmoga', 'price': '62.88'}, {'shop': 'Cdkeys.com', 'price': '63.99'}, {'shop': 'Gamesdeal', 'price': '65.24'}, {'shop': 'GamingDragons', 'price': '66.45'}, {'shop': 'GamingDragons', 'price': '66.45'}, {'shop': 'Gamebillet', 'price': '74.68'}, {'shop': 'Cdkeys.com', 'price': '76.49'}, {'shop': 'Instant Gaming', 'price': '76.74'}, {'shop': 'GreenmanGaming', 'price': '77.39'}, {'shop': 'G2PLAY', 'price': '77.70'}, {'shop': 'Kinguin', 'price': '80.18'}, {'shop': '2Game', 'price': '80.99'}, {'shop': 'Mmoga', 'price': '82.32'}, {'shop': 'DLGamer', 'price': '82.79'}, {'shop': 'GAMIVO', 'price': '82.87'}, {'shop': 'GAMIVO', 'price': '82.87'}, {'shop': 'Gamebillet', 'price': '82.98'}, {'shop': 'Instant Gaming', 'price': '83.01'}, {'shop': 'HRKGAME', 'price': '83.49'}, {'shop': 'G2A.COM', 'price': '84.24'}, {'shop': 'Cdkeys.com', 'price': '84.49'}, {'shop': 'Cdkeys.com', 'price': '84.49'}, {'shop': 'G2PLAY', 'price': '85.15'}, {'shop': 'G2A.COM', 'price': '85.92'}, {'shop': 'GreenmanGaming', 'price': '85.99'}, {'shop': 'GamesRocket', 'price': '86.02'}, {'shop': 'G2A.COM', 'price': '86.51'}, {'shop': 'Instant Gaming', 'price': '87.07'}, {'shop': 'Press', 'price': '87.07'}, {'shop': 'Kinguin', 'price': '87.87'}, {'shop': 'GAMIVO', 'price': '88.40'}, {'shop': 'GamersGate', 'price': '89.99'}, {'shop': '2Game', 'price': '89.99'}, {'shop': 'GameStop', 'price': '89.99'}, {'shop': 'GameStop', 'price': '89.99'}, {'shop': 'G2PLAY', 'price': '90.48'}, {'shop': 'Mmoga', 'price': '91.47'}, {'shop': 'G2PLAY', 'price': '91.54'}, {'shop': 'DLGamer', 'price': '91.99'}, {'shop': 'HRKGAME', 'price': '92.52'}, {'shop': 'Kinguin', 'price': '93.36'}, {'shop': 'GAMIVO', 'price': '93.93'}, {'shop': 'Kinguin', 'price': '94.46'}, {'shop': 'GamesRocket', 'price': '94.68'}, {'shop': 'Gamesdeal', 'price': '97.87'}, {'shop': 'GamersGate', 'price': '99.99'}]

所有 5 位数字 (*.) 都被扔到前面,然后,所有数字都被正确排序。 我用只有 4 位数字的列表尝试了这个,一切正常。
不知道为什么会这样。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    字符串排序按字母顺序。所以“100.59”在“99”之前。

    使用

    key=lambda k: float(k['price'])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      相关资源
      最近更新 更多