Python的Namedtuple索引实例

问题描述:

所以这是我对我的实验室编码项目代码,我目前的工作:Python的Namedtuple索引实例

from collections import namedtuple 
Restaurant = namedtuple('Restaurant', 'name cuisine phone dish price') 

# Restaurant attributes: name, kind of food served, phone number, best dish, price of that dish 

RC = [Restaurant("Thai Dishes", "Thai", "334-4433", "Mee Krob", 12.50), 
     Restaurant("Nobu", "Japanese", "335-4433", "Natto Temaki", 5.50), 
     Restaurant("Nonna", "Italian", "355-4433", "Stracotto", 25.50), 
     Restaurant("Jitlada", "Thai", "324-4433", "Paht Woon Sen", 15.50), 
     Restaurant("Nola", "New Orleans", "336-4433", "Jambalaya", 5.50), 
     Restaurant("Noma", "Modern Danish", "337-4433", "Birch Sap", 35.50), 
     Restaurant("Addis Ababa", "Ethiopian", "337-4453", "Yesiga Tibs", 10.50)] 

我想问你作为一个初学者是:什么方法(S)我应该使用允许我的程序索引列表的特定部分?

例如,我怎么去索引所有的大名单中餐馆的名单?这份名单包括刚刚从列表中餐馆不是所有的其他信息,如电话号码,等...

我都用了分片方式和列表功能在试图弄清楚这一点,我自己并没有证明工作。 > :(

+0

我想我不知道你在这种情况下指数是什么意思? – Colleen

+0

这是特定的疑问,实验室提出,如果这有助于: –

+0

假设你的意思是'通过“所有餐馆” name','RC [0] .name'将是第一项。 – Moshe

我不知道,当你说指数如果你只想值或性能,但对于基本检索你可能只是做这样的事情

[r.name for r in RC] 

这将使你所有的名字餐厅你在RC

你可以更大胆,

RC = [...] 
def getValues(name): 
    return [getattr(r, name) for r in RC] 

然后,你可以这样做,

getValues('name') 

如果你需要缓存你可以考虑使用memoize的

不能完全肯定你的意思是“指数”,但这可能会做你想要什么:

from collections import namedtuple 
Restaurant = namedtuple('Restaurant', 'name cuisine phone dish price') 

# Restaurant attributes: name, kind of food served, phone number, best dish, price of that dish 

RC = [Restaurant("Thai Dishes", "Thai", "334-4433", "Mee Krob", 12.50), 
     Restaurant("Nobu", "Japanese", "335-4433", "Natto Temaki", 5.50), 
     Restaurant("Nonna", "Italian", "355-4433", "Stracotto", 25.50), 
     Restaurant("Jitlada", "Thai", "324-4433", "Paht Woon Sen", 15.50), 
     Restaurant("Nola", "New Orleans", "336-4433", "Jambalaya", 5.50), 
     Restaurant("Noma", "Modern Danish", "337-4433", "Birch Sap", 35.50), 
     Restaurant("Addis Ababa", "Ethiopian", "337-4453", "Yesiga Tibs", 10.50)] 

def retrieve(records, column): 
    """ return list of values for column from a list of namedtuples """ 
    if records and column not in records[0]._fields: 
     raise ValueError('invalid column name:' + repr(column)) 
    return [getattr(rec, column) for rec in records] 

print retrieve(RC, 'name') 

输出:

['Thai Dishes', 'Nobu', 'Nonna', 'Jitlada', 'Nola', 'Noma', 'Addis Ababa']