【问题标题】:Sort objects in python and group objects that have identical values? [duplicate]对python中的对象进行排序并对具有相同值的对象进行分组? [复制]
【发布时间】:2021-03-25 06:47:29
【问题描述】:

一个示例问题。实际问题使用日期时间,但这简化了这个例子

unordered_list = [Class(letter='A', value=5), 
                  Class(letter='B', value=3), 
                  Class(letter='C', value=2), 
                  Class(letter='D', value=8), 
                  Class(letter='E', value=5), 
                  Class(letter='F', value=8)]

sorted_list = fun(unordered_list)

expected_result = [Class(letter='C', value=2),
                   Class(letter='B', value=3),
                   (Class(letter='A', value=5), Class(letter='E', value=5)),
                   (Class(letter='D', value=8), Class(letter='F', value=8))]
# or
expected_result = [(Class(letter='C', value=2)),
                   (Class(letter='B', value=3)),
                   (Class(letter='A', value=5), Class(letter='E', value=5)),
                   (Class(letter='D', value=8), Class(letter='F', value=8))]

我真的不介意它们的格式; list、set、tuple 我不挑剔。

我自己在下面回答了这个问题。但是我认为有一种更快或更pythonic的方法。

如果你想运行示例问题,需要额外的代码

class Class:
    def __init__(self, letter, value):
        self.letter = letter
        self.value = value

    def __str__(self):
        return self.letter+'->'+str(self.value)

python 排序方法 (sorted(unordered_list, key=lambda x: x.value)) 确实不能自行解决这个问题,因为相同值的项目没有被分组

【问题讨论】:

  • python 排序方法(sorted(unordered_list, key=lambda x: x.value)) 本身并不能解决这个问题,因为相同值的项目没有分组
  • 经过更多搜索后,我相信这篇帖子stackoverflow.com/a/6602441 可能是我正在寻找的答案。此问题已关闭,因此我无法发布该答案

标签: python-3.x sorting


【解决方案1】:

这是我的回答

def fun(unordered_list):
    value_getter = lambda obj: obj.value
    return custom_sort(unordered_list, value_getter)

def custom_sort(unordered_list, property_getter):
    values = {property_getter(a_class) for a_class in unordered_list}
    sorted_values = sorted(values)
    sorted_list = []
    for a_value in sorted_values:
        sorted_list.append([x for x in unordered_list if property_getter(x) == a_value])

    return sorted_list

【讨论】:

    猜你喜欢
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 2013-02-24
    • 2018-10-24
    • 2020-04-24
    • 2023-03-22
    相关资源
    最近更新 更多