Python:为什么itemgetter的返回类型不一致

Pek*_*kka 4 python python-3.x

Python itemgetter不返回长度为0或1的元组.例如:

from operator import itemgetter

def get_something(keys):
    d = {
        "a": 1,
        "b": 2,
        "c": 3
    }
    return itemgetter(*keys)(d)

print(type(get_something(["a", "b"])))
# <class 'tuple'>
print(type(get_something(["a"])))
# <class 'int'>
print(type(get_something([])))
# TypeError: itemgetter expected 1 arguments, got 0 
Run Code Online (Sandbox Code Playgroud)
  • 有这么好的理由itemgetter吗?而不是(1,)第二个()和最后一个?

  • 如果我总是希望返回给定键的元组/列表,是否还有其他内置选项?

Chr*_*nds 8

如果我总是希望返回给定键的元组/列表,是否还有其他内置选项?

只需使用一种理解:

[d[k] for k in keys]
Run Code Online (Sandbox Code Playgroud)

在上下文中:

from operator import itemgetter

def get_something(keys):
    d = {
        "a": 1,
        "b": 2,
        "c": 3
    }
    return [d[k] for k in keys]

print(get_something(["a", "b"]))
#[1, 2]
print(get_something(["a"]))
#[1]
print(get_something([]))
#[]
Run Code Online (Sandbox Code Playgroud)

  • @Pekka使用`lambda`有效,但性能较差(较慢)/sf/ask/1207053431/ (2认同)