按键值过滤字典列表-以字典列表形式返回答案

Lew*_*ris 4 python dictionary list filter

我有一个要过滤的词典列表。

[{"Slope": -0.562, "Count": 3},
 {"Slope": -0.362, "Count": 6},
 {"Slope": -0.762, "Count": 8},
 {"Slope": -0.562, "Count": 12},
 {"Slope": 2.5, "Count": 34},
 {"Slope": 1.52, "Count": 2},
 {"Slope": .56, "Count": 6}]
Run Code Online (Sandbox Code Playgroud)

我的目标是获得两个字典的列表。一个具有“最高计数和正斜率”,另一个具有“最高计数和负斜率”。

我的计划是过滤掉所有积极和消极的人,然后对每个列表进行排序,然后使用每个人的第一条记录创建一个新列表。

排序列表对我来说不是问题,我已经明白了!

lines_lst.sort(key=lambda i: i['lines_count'])
Run Code Online (Sandbox Code Playgroud)

但是当我尝试过滤时似乎无法正常工作,因为它返回了字典。

positive_lines = next(item for item in lines_lst if item["Slope"] > 0)
Run Code Online (Sandbox Code Playgroud)

有没有人解决以下问题?

[{"Slope": -0.562, "Count": 12},{"Slope": 2.5, "Count": 34}]
Run Code Online (Sandbox Code Playgroud)

Pat*_*ner 6

您需要max和min ..使用它们并应用合适的键函数-实际上,使用元组只需要max:

data = [{"Slope": -0.562, "Count": 3},
        {"Slope": -0.362, "Count": 6},
        {"Slope": -0.762, "Count": 8},
        {"Slope": -0.562, "Count": 12},
        {"Slope": 2.5, "Count": 34},
        {"Slope": 1.52, "Count": 2},
        {"Slope": .56, "Count": 6}]

m1 = max(data, key= lambda x: (x["Slope"]>0, x["Count"]))
m2 = max(data, key= lambda x: (x["Slope"]<0, x["Count"]))

result = [m1,m2]

print(result)
Run Code Online (Sandbox Code Playgroud)

输出:

[{'Slope': 2.5, 'Count': 34}, {'Slope': -0.562, 'Count': 12}]
Run Code Online (Sandbox Code Playgroud)

元组按第一个值排序,然后按第二个值排序-您可以构建元组并将其用作最大键函数。