从iterable中提取值。
pluck的Python项目详细描述
提取:从值列表中快速提取“fields”
采摘是从一定价值中采摘“田地”最简单的方法。 “字段”可以是item.field或item[field]。两者都试过, 按顺序。如果未找到任何内容,并且未指定默认值,则 引发异常。
用法
该软件包由一个模块组成,包含两个功能:
from pluck import pluck, ipluck
ipluck只是pluck的iterable版本。像这样使用:
pluck(iterable, key)
或:
pluck(iterable, *keys)
示例
先举个简单的例子。假设您有一个日期时间列表:
>>> from pluck import pluck >>> dates = [ ... datetime(2012, 10, 22, 12, 00), ... datetime(2012, 10, 22, 15, 14), ... datetime(2012, 10, 22, 21, 44), ... ] >>> pluck(dates, 'day') [22, 22, 22] >>> pluck(dates, 'hour') [12, 15, 21]
它也适用于类似字典的访问(__getitem__):
>>> objects = [ ... {'id': 282, 'name': 'Alice', 'age': 30, 'sex': 'female'}, ... {'id': 217, 'name': 'Bob', 'age': 56}, ... {'id': 328, 'name': 'Charlie', 'age': 56, 'sex': 'male'}, ... ] >>> pluck(objects, 'name') ['Alice', 'Bob', 'Charlie'] >>> pluck(objects, 'age') [30, 56, 56]
您也可以将它们组合成一个单一的拨片:
>>> pluck(objects, 'name', 'age') [('Alice', 30), ('Bob', 56), ('Charlie', 56)]
默认值
也可以指定默认值。默认情况下,pluck将抛出 当“字段”不存在时例外:
>>> pluck(objects, 'sex') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "pluck.py", line 104, in pluck return list(ipluck(iterable, *keys, **kwargs)) File "pluck.py", line 49, in getter raise ValueError('Item %r has no attr or key for %r' % (item, key)) ValueError: Item {'age': 56, 'id': 217, 'name': 'Bob'} has no attr or key for 'sex'
要用默认值填充这些位置,请使用以下命令:
>>> pluck(objects, 'sex', default='unknown') ['female', 'unknown', 'male']
当您指定多个键时,需要使用defaults(复数!) 关键字参数:
>>> pluck(objects, 'name', 'sex', defaults={'sex': 'unknown'}) [('Alice', 'female'), ('Bob', 'unknown'), ('Charlie', 'male')]
更确切地说是迭代器?
如果您希望有迭代器,请使用ipluck:
>>> from pluck import ipluck >>> ipluck(large_stream_of_items, 'name') <itertools.imap object at 0x10c7515d0>
pluck等同于list(ipluck(...))。
历史记录
0.2(2012-10-22)
- Add Python 3 compatibility
- Improve documentation
0.1(2012-10-22)
- Initial release.