如何在python中根据某个值过滤列表中字典的值并按排序顺序排列



我有一个字典列表,它有不同的键和值组合。

list_ = [{'r':'640x360','b':500},{'r':'1280x720','b':3000}, {'r':'1920x1080','b':4000},{'r':'1920x1080','b':5000}, {'r':'1280x720','b':3100}, {'b':'1280x720','t':3300}]

我想先对这本词典进行排序,然后根据"b"的值对其进行修改。假设分辨率值"r"为"1280x720",并且它在不同字典中的"b"中具有不同的比特率。

让我们以"1280x720"案例为例。对于"1280x720",我希望最低比特率为2000。如果值"b"小于2000,则必须将2000作为"b"。

如果这两个字典的分辨率相同,并且比特率"b"相差+-300,那么它必须保留具有更高值的dict,并弹出另一个。

如果值"b"大于最小值,我们也必须保留该字典。

输入中"1280x720"的条目

[{'r':'1280x720','b':3000},{'r':'1280x720','b':3100}, {'b':'1280x720','t':3300},{'r':'1280x720','b':1300}, {'r':'1280x720','b':2500}]

在我期望的输出中输入"1280x720"。

[{'r':'1280x720','b':2000},{'r':'1280x720','b':2500},{'r':'1280x720','b':3300}]

我试着用下面的代码对它们进行排序,但无法继续剩下的。

new_rep = [dict(t) for t in set(tuple(d.items()) for d in list_)]

我得到了已排序的dicts列表。

如有任何帮助,我们将不胜感激。

这看起来很有效:

data = [{'r':'1280x720','b':3000},{'r':'1280x720','b':3100}, {'r':'1280x720','b':3300},{'r':'1280x720','b':1300}]
sorted_data = sorted(data, key=lambda d: -d['b'])
print(sorted_data)
result = []
for item in sorted_data:
if item['b'] < 2000:
item['b'] = 2000
new_res = True
for res_item in result:
if (res_item['b'] > item['b']  and res_item['b'] - item['b'] <= 300) or (res_item['b'] < item['b']  and item['b']  - res_item['b'] <= 300):
new_res = False
if new_res:
result.append(item)
result = sorted(result, key=lambda d: d['b'])
print(result)

输出:

[{'r': '1280x720', 'b': 2000}, {'r': '1280x720', 'b': 2500}, {'r': '1280x720', 'b': 3300}]

最新更新