我试图从列表中的namedtuple中检索值。它需要一个参数,一个namedtuple或一个namedtuples列表,并返回price字段中的值。这是我的代码:
def price(rlist):
for item in rlist:
return item.price
RC = [
Restaurant("Thai Dishes", "Thai", "334-4433", "Mee Krob", 12.50),
Restaurant("Nobu", "Japanese", "335-4433", "Natto Temaki", 5.50)]
print(price(RC))
它应该打印12.50和5.50 ..但它只打印12.50。如何改进或更正迭代?
Book = namedtuple('Book', 'title author year price')
favorite = Book('Adventures of Sherlock Holmes', 'Arthur Conan Doyle', 1892, 21.50)
然后当我这样做时:
price(favorite)
它给了我一个错误:
for item in rlist:
TypeError: 'type' object is not iterable
答案 0 :(得分:2)
也许使用
def price(rlist):
return [item.price for item in rlist]
返回您想要的内容
答案 1 :(得分:0)
您可以list comprehension使用string.join方法。
>>> from collections import namedtuple
>>> Restaurant = namedtuple('Restaurant', 'name cuisine phone dish price')
>>> RC = [Restaurant("Thai Dishes", "Thai", "334-4433", "Mee Krob", 12.50), Restaurant("Nobu", "Japanese", "335-4433", "Natto Temaki", 5.50)]
>>> def price(a_tuple):
... return ', '.join([str(rc.price) for rc in a_tuple])
...
>>> price(RC)
'12.5, 5.5'
方法join返回一个包含iterable元素的字符串。
要解决只有一个namedtuple(而不是它们的列表)的问题,你可以检查参数是否有一个属性_fields(namedtuples有这个属性)
>>> def price(a_tuple):
... if hasattr(a_tuple, '_fields'):
... return a_tuple.price
... return ', '.join([str(rc.price) for rc in a_tuple])
...
>>> price(RC)
'12.5, 5.5'
>>> price(RC[0])
12.5
此解决方案使用任何可迭代类型(列表,元组,迭代器等)