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)
您需要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)
元组按第一个值排序,然后按第二个值排序-您可以构建元组并将其用作最大键函数。
归档时间: |
|
查看次数: |
84 次 |
最近记录: |