使用生成器表达式时如何从字典列表中获取项的键

2024-10-01 11:24:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力学习生成器表达式以及它们是如何工作的。你知道吗

我有一本这样的词典

la = [ {'app_name': 'MKV58YCF8RR','time_diff': 17647},
       {'app_name': 'ZXG68HYW4BA','time_diff': 18132}]

我想从中得到time_diff的最大值,我使用了max

max_val = max(value["time_diff"] for value in la)

这给了我

18132

但是我还想打印这个app_nametime_diff。你知道吗

预期输出:

ZXG68HYW4BA is 18132

电流输出

18132

有人能告诉我怎样才能同时得到app_name键吗?你知道吗

编辑:

我想我需要使用map,但不知道如何使用?你知道吗


Tags: nameinappfortimeisvalue表达式
2条回答

首先确定最大值,就像您所做的那样,然后选择具有此值的项:

max_time_diff = max(item["time_diff"] for item in la)
max_item = next(item for item in la if item["time_diff"] == max_time_diff)

next()从iterable中选择下一项。你知道吗

在这种特殊情况下,iterable正好是一个项长,但理论上可能有多个项的time_diff等于max_time_diff,因此next()确保只选取第一个匹配项。你知道吗

la上使用max,并提供一个可调用的key,这样就可以得到time_diff值最高的整个字典。你知道吗

>>> la = [{'app_name': 'MKV58YCF8RR','time_diff': 17647},
...        {'app_name': 'ZXG68HYW4BA','time_diff': 18132}]
>>> 
>>> max_d = max(la, key=lambda d: d['time_diff']) # dict with max time_diff
>>> print('{d[app_name]} is {d[time_diff]}'.format(d=max_d))
ZXG68HYW4BA is 18132

thank you, i don't understand how lambda is working here if there is no loop to iterate entire list.

不要被lambda分心。它被用作选择la最大值的标准,但我们也可以将它作为一个普通函数来编写。你知道吗

>>> def criterion(dictionary):
...     return dictionary['time_diff']
... 
>>> max(la, key=criterion)
{'app_name': 'ZXG68HYW4BA', 'time_diff': 18132}

max迭代la,用la的每个元素调用criterion,并返回la的元素,其中criterion是最大的。你知道吗

can I extract it just like you did with lambda, while using itemgetter instead?

当然!你知道吗

>>> import operator
>>> max_d = max(la, key=operator.itemgetter('time_diff'))
>>> print('{d[app_name]} is {d[time_diff]}'.format(d=max_d))
ZXG68HYW4BA is 18132

相关问题 更多 >