【问题标题】:What is the optimal way to sort a list of dictionaries based on multiple keys and remove some of the dictionaries基于多个键对字典列表进行排序并删除一些字典的最佳方法是什么
【发布时间】:2013-04-17 09:23:15
【问题描述】:

根据多个键对字典列表进行排序并同时从输出中删除一些字典的最佳(时间)方法是什么?

我希望输出是所有字典的列表,其中 "protected":0 并按任意数量的其他键排序。

数据

[{"raffle_id":"81","created":"2013-01-07 19:47:57","instant":"1","protected":0,"expire":"never","ticket_price":"0.00050000",
"tickets_total":"10","tickets_sold":"1","my_tickets_count":"1"},
{"raffle_id":"83","created":"2013-01-07 19:49:20","instant":"0","protected":1,"expire":"4d 23h 59m","ticket_price":"0.01000000",
"tickets_total":"50","tickets_sold":"0","my_tickets_count":"0"}]

当前方法

raffle_list = [raffle for raffle in raffle_list if raffle("protected") == "0"]

sorted_raffles = sorted(raffles_list, key = operator.itemgetter("ticket_price", "tickets_sold", "my_tickets_count", "tickets_total"))

【问题讨论】:

  • 实际上这可能是最有效的方法。你说的是原始速度吗?
  • 是的,它需要尽可能快。我希望有一些简单的方法可以组合这两个操作,这样就不需要遍历列表两次。
  • 你已经完美地完成了所有事情,你唯一可以尝试的就是让raffle_list成为一个生成器,例如。 (raffle for raffle in raffle_list if raffle("protected") == "0") 但列表推导实际上通常更快......这只会将列表的一个副本保存到内存中,因为sorted 会制作另一个副本,您必须对其进行测试

标签: python list sorting optimization dictionary


【解决方案1】:

我只能建议将raffle_list 制作成一个生成器,但这可能/可能不会更快,具体取决于可用的数据和内存。例如。对于小型数据集,列表比较更快,但生成器避免在内存中进行复制,这可能会提高大型数据集的速度,因为sorted 也会进行复制:

(raffle for raffle in raffle_list if raffle("protected") == "0")

【讨论】:

    猜你喜欢
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    相关资源
    最近更新 更多