我有一个字典列表,它有不同的键和值组合。
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}]