2013-03-28 2 views
-1

Так вот мой код для моего проекта кодирования лаборатории, что я в настоящее время работает над:Python Namedtuple Индексация Instance

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)] 

Мой вопрос к вам как начинающий: какой метод (ы) следует использовать, чтобы моя программа для индексации определенных частей списка?

Например, как мне начать индексирование списка всех ресторанов из большего списка? Этот список включает только рестораны из списка, а не всю другую информацию, такую ​​как номера телефонов и т. Д.

Я использовал как методы среза, так и функции списка, пытаясь понять это сам, и это не помогло , > :(

+0

Я думаю, что я не уверен, что вы подразумеваете под индексом в этом обстоятельстве? – Colleen

+0

Это конкретный вопрос, который ставит лаборатория, если это помогает: –

+0

Предполагая, что вы называете «имя» всеми «ресторанами», «RC [0] .name' будет первой записью. – Moshe

ответ

1

Я не уверен, когда вы говорите, индекс, если вы просто хотите, чтобы значение или для исполнения. Но для основного поиска вы можете просто сделать что-то вроде этого

[r.name for r in RC] 

который даст вам все имена ресторанов вы имеете в RC

вы можете получить новые идеи,

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

Тогда вы можете просто сделать,

getValues('name') 

Если вам это нужно для кэширования вы можете посмотреть в использовании memoize

0

Не совсем уверен, что вы подразумеваете под «индексом», но это может сделать то, что вы хотите:

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'] 
Смежные вопросы