Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中字典的筛选器列表_Python_List_Python 2.7_Dictionary_Filter - Fatal编程技术网

python中字典的筛选器列表

python中字典的筛选器列表,python,list,python-2.7,dictionary,filter,Python,List,Python 2.7,Dictionary,Filter,所以,我需要建立一个过滤器,基本上采取以下信息 dictlist = [{'ext': 'mp4', 'height': 480, 'id', 'pies'}, {'ext': 'webm', 'height': 360, 'id', 'pies2'}, {'ext': 'mp4',

所以,我需要建立一个过滤器,基本上采取以下信息

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)
将返回。。。馅饼

这个怎么样:

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
,而第二个版本只会返回高度最大的东西。

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
,而第二个版本将仅返回具有最大高度的对象。

一个函数执行相同操作:

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

执行相同操作的函数:

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

也许你应该反复检查一下你的情况。它会返回tucker no?糟糕的措辞。我想要一个“低于”的值,而不是“等于或低于”的值。可能只需要遍历它并检查您的条件。它将返回tucker no?糟糕的措辞。我想要一个“低于”的值,而不是“等于或低于”的值。这并不能解释最大高度。我在中得到一个语法错误。这台Python 2.7兼容吗?@VardaElbereth--对不起,输入错误。当我们讨论这个问题时,您的示例数据也有一些语法错误(
,而不是
)哈哈。非常感谢!是的,我差不多是手工做的。或者试图。实际的数据是巨大的,所以我不能复制/粘贴。而且,我应该说,我一直在用C#和Python进行工作,虽然很多关于C#问题的评论都非常刻薄、刻薄和傲慢,但到目前为止,所有用Python回答的人都非常棒和善良。你们真是太棒了,这并不能解释最大高度。我在输入端发现了一个语法错误。这台Python 2.7兼容吗?@VardaElbereth--对不起,输入错误。当我们讨论这个问题时,您的示例数据也有一些语法错误(
,而不是
)哈哈。非常感谢!是的,我差不多是手工做的。或者试图。实际的数据是巨大的,所以我不能复制/粘贴。而且,我应该说,我一直在用C#和Python进行工作,虽然很多关于C#问题的评论都非常刻薄、刻薄和傲慢,但到目前为止,所有用Python回答的人都非常棒和善良。你们太棒了