平凡函子

2024-04-25 16:52:32 发布

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

我经常写这样的代码:

sorted(some_dict.items(), key=lambda x: x[1])
sorted(list_of_dicts, key=lambda x: x['age'])
map(lambda x: x.name, rows)

我想写的是:

sorted(some_dict.items(), key=idx_f(1))
sorted(list_of_dicts, key=idx_f('name'))
map(attr_f('name'), rows)

使用:

def attr_f(field):
  return lambda x: getattr(x, field)

def idx_f(field):
  return lambda x: x[field]

python中是否有像idx\u f和attr\u f这样的函子创建者,它们在使用时是否比lambda更清晰?你知道吗


Tags: oflambdakeynamefieldmapitemssome
1条回答
网友
1楼 · 发布于 2024-04-25 16:52:32

operator模块有^{}^{}两个功能:

from operator import attrgetter, itemgetter

sorted(some_dict.items(), key=itemgetter(1))
sorted(list_of_dicts, key=itemgetter('name'))
map(attrgetter('name'), rows)

这些函数还接受多个参数,此时它们将返回一个包含每个参数值的元组:

# sorting on value first, then on key
sorted(some_dict.items(), key=itemgetter(1, 0))

# sort dictionaries by last name, then first name
sorted(list_of_dicts, key=itemgetter('last_name', 'first_name'))

attrgetter()函数还接受虚线名称,在这里可以访问属性的属性:

# extract contact names
map(attrgetter('contact.name'), companies)

相关问题 更多 >