所以,我需要构建一个基本上采用以下信息的过滤器......
dictlist = [{'ext': 'mp4',
'height': 480,
'id', 'pies'},
{'ext': 'webm',
'height': 360,
'id', 'pies2'},
{'ext': 'mp4',
'height': 360,
'id', 'charles1'},
{'ext': 'mp4',
'height': 720,
'id', 'tucker'}]
(那里有更多的东西,但这是简化的)
然后输出元素的id,这个元素既是mp4(或者我想要的任何东西。我瞄准一个函数,或者替代地,如果它存在的话,使用内置的东西更加python-y并且具有低于值的最高高度。
例如,我想构建一个类似于......的函数。
def getmestuff(listofdics, extrequired, heightmax):
/*do the work*/
return id;
例如,使用上述数据...
getmestuff(dictlist, 'mp4', 720)
将返回...馅饼
答案 0 :(得分:5)
怎么样:
mp4s = (d for d in dictlist if d['ext'] == 'mp4')
max(mp4s, key=lambda x: x['height'])
这将返回“max”字典 - 从那里获得id
很容易。 (并且您可以轻松地内联mp4s
,但为了清晰起见,我将其分为两行。)
不太容易阅读,但更紧凑:
max(dictlist, key=lambda d: (d['ext'] == 'mp4', d['height']))
如果列表中没有mp4,第一个版本也将有助于提升ValueError
,而第二个版本将返回具有最大高度的东西。
答案 1 :(得分:0)
执行相同操作的功能:
def get_me_stuff(dict_l, val, max_h):
best = 0
id = None
for d in dict_l:
h = d.get('height')
if d.get("ext") == val and max_h > h > best:
best = h
id = d.get("id")
return id