对无法正常使用双打的字典列表进行排序[重复]

Posted

技术标签:

【中文标题】对无法正常使用双打的字典列表进行排序[重复]【英文标题】: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 位数字的列表尝试了这个,一切正常。 不知道为什么会这样。

【问题讨论】:

【参考方案1】:

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

使用

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

【讨论】:

以上是关于对无法正常使用双打的字典列表进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

按特定键的降序对字典列表进行排序[重复]

在Python 3.4中按日期对字典列表进行排序[重复]

对具有多个大小值的字典进行排序

我想要一些关于如何根据元素频率对列表进行排序的帮助[重复]

如何按字典中的值对字典列表进行排序? [复制]

在 C# Windows 窗体中对字典进行排序[重复]