我对蟒蛇很陌生。在Python中,我希望首先根据“年份”键对字典项列表进行排序,然后使用字母数字( P1、P2、P3 )键对字典项进行排序。
代码片段如下所示:
[
    {"P9": 0, "year": 2023},
    {"P13": 0, "year": 2023},
    {"P10": 0, "year": 2023},
    {"P11": 121200, "year": 2022},
    {"P12": 0, "year": 2023},
]第一次按年排序的为:
[
    {"P11": 121200, "year": 2022},
    {"P9": 0, "year": 2023},
    {"P13": 0, "year": 2023},
    {"P10": 0, "year": 2023},
    {"P12": 0, "year": 2023},
]再次按句号( P1、P2、P3等)排序为:
[
    {"P11": 121200, "year": 2022},
    {"P9": 0, "year": 2023},
    {"P10": 0, "year": 2023},
    {"P12": 0, "year": 2023},
    {"P13": 0, "year": 2023},
]上面是预期的输出,现在我不知道该如何分类
发布于 2022-06-13 07:37:39
对于排序第一个基本years,然后排序每个dict的基第一个键,您可以捕获数字并转换为int,然后进行排序,如下所示:
>>> sorted(lst_dct, key=lambda x: (x['year'], int(list(x.keys())[0][1:])))
[{'P11': 121200, 'year': 2022},
 {'P9': 0, 'year': 2023},
 {'P10': 0, 'year': 2023},
 {'P12': 0, 'year': 2023},
 {'P13': 0, 'year': 2023}]发布于 2022-06-13 07:31:53
排序函数可以满足您的需要
您可以传递一个键函数(可调用的)来标识正确的顺序。就你而言:
unordered = [{'P9': 0, 'year': 2023}, {'P13': 0, 'year': 2023}, {'P10': 0, 'year': 2023}, {'P11': 121200, 'year': 2022}, {'P12': 0, 'year': 2023}]
#by year
sorted(unordered, key=lambda x: x['year'])
# out
[{'P11': 121200, 'year': 2022},
 {'P9': 0, 'year': 2023},
 {'P13': 0, 'year': 2023},
 {'P10': 0, 'year': 2023},
 {'P12': 0, 'year': 2023}]对于这段时间,解决方案有点棘手,您必须确定如何选择P**键。我们不知道这些字典是如何构建的,但我们做了一些假设,比如:
sorted(unordered, key=lambda x: [lbl for lbl in x if lbl.startswith('P')][0] )但这里缺乏更准确的信息。
发布于 2022-06-13 07:41:00
您可以使用排序函数,并使用它指定一个键函数。但是,由于您想要使用两个单独的数据点作为键,所以可以使用tuple构建一个键。
因为当比较元组时,它首先比较其中的第一个实体,如果第一个实体匹配,则检查第二个实体。
示例:
>>> (1,3) > (1, 4)
False
>>> (1, 4) < (2,2)
True
>>> (1, 4, 1) < (2, 1)
True下面是如何构建您的关键功能:
>>> unordered = [{'P9': 0, 'year': 2023}, {'P13': 0, 'year': 2023}, {'P10': 0, 'year': 2023}, {'P11': 121200, 'year': 2022}, {'P12': 0, 'year': 2023}]
>>> ordered = sorted(
    unordered,
    key=lambda d: (d['year'], next(int(k[1:]) for k in d.keys() if k.startswith('P')))
)
>>> ordered
[{'P11': 121200, 'year': 2022}, {'P9': 0, 'year': 2023}, {'P10': 0, 'year': 2023}, {'P12': 0, 'year': 2023}, {'P13': 0, 'year': 2023}]在这里,我假设字典中总是有一个以P开头的键,其馀部分是整数。
https://stackoverflow.com/questions/72599038
复制相似问题