簡體   English   中英

如何讓itemgetter從列表變量中獲取輸入?

[英]How can I make itemgetter to take input from list variable?

如何將itemgetter與list變量一起使用而不是整數? 例如:

from operator import itemgetter
z = ['foo', 'bar','qux','zoo']
id = [1,3]

我這樣做沒問題:

In [5]: itemgetter(1,3)(z)
Out[5]: ('bar', 'zoo')

但是當我這樣做時它給出了錯誤:

In [7]: itemgetter(id)(z)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-7-7ba47b19f282> in <module>()
----> 1 itemgetter(id)(z)

TypeError: list indices must be integers, not list

如何讓itemgetter正確地從列表變量中獲取輸入,即使用id

當你這樣做時:

print itemgetter(id)(z)

您將list傳遞給itemgetter ,而它期望索引(整數)。

你能做什么? 您可以使用*解壓縮list

print itemgetter(*id)(z)

為了更好地可視化,以下兩個調用都是等效的:

print itemgetter(1, 2, 3)(z)
print itemgetter(*[1, 2, 3])(z)

使用參數解包

>>> indices = [1,3]
>>> itemgetter(*indices)(z)
('bar', 'zoo')

並且不要使用id作為變量名,它是一個內置函數。

你可以看看https://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists

itemgetter(*id)(z)將得到你想要的,正如Awini Haudhary已經指出的那樣。 在某些情況下,解包dict也很有用。

實際問題是, itemgetter期望將項目列表作為單個參數傳遞,但是您傳遞的是單個列表。 所以,你可以在Aशwiniचhaudhary的回答中解壓縮,或者你可以apply id,像這樣

print apply(itemgetter, ids)(z)
# ('bar', 'zoo')

注意: apply實際上已棄用。 總是喜歡打開包裝。 我提到的僅僅是為了完整性而apply

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM