2014-02-04 4 views
0

У меня есть список элементов. как banana, apple, orange и т.д. Каждый из них имеет подмигнули свойства, как banana: 'name': 'banana','color': 'yellow' и т.д.Python создает переменную для каждого элемента

То, что я пытаюсь сделать, это создать переменную для каждого элемента. Поэтому я могу назвать это fruit.banana['color'] и получить значение yellow назад.

Пример кода:

fruits = cur.fetchall() 
for fruittarget in fruits: 
    fruit = fruittarget['name'] 
    cur.execute("SELECT * FROM fruits where name = %s ;",(fruit)) 
    rows = cur.fetchone() 
    name = rows["name"] 
    fruitfunc = {name: rows['name']} 
    fruitfunc[rows['name']] = {'color': rows['color']} 
print fruitfunc[banana]['color'] 

Проблема заключается в том, что работает только для самого последнего в каждого из них. как сделать fruitfunc.banana['color'], fruitfunc.potato['color']? Я хочу установить имя переменной с переменной, как getfruit + name = fruitfunc. Поэтому для каждого элемента в списке создается varible.

+0

Ваших отступы сломаны. –

+5

Не делайте этого. Создайте словарь под названием «фрукты» и сделайте каждый «фрукт» ключевым в этом. Динамическое создание переменных верхнего уровня делает ваш код более трудным для чтения и больше подвержен ошибкам. –

+0

@NoufalIbrahim: OP делает именно это; формулировка довольно слабо выбрана. –

ответ

1
fruits = {'banana': {'color': 'yellow'}, 'potato': {'color': 'beige'}} 

Используйте имена в качестве ключей. Чтобы получить цвет банана, обратитесь к fruits['banana']['color'].

+0

Хорошо, один массивный дикт, похоже, является решением, а затем спасибо! – tsjk

+0

Я сделаю все возможное, чтобы не шутить о массивных диктофонах, ха-ха. Во всяком случае, дикты кажутся (из того, что я читал и переживал) быстро, хотя они довольно интенсивные для памяти. – henrebotha

0
# this class simulates cur.fetchall and cur.execute 
# to stick with your example code 

class Database: 
    data = [{"name":"banana","color":"yellow"},{"name":"red_apple","color":"red"}] 
    def execute(self,ignored,name): 
     for element in self.data : 
      if element["name"] == name: 
       return element 
    def fetchall(self): 
     return self.data 

cur = Database() 
fruits = cur.fetchall() 
mydict = {} 
for fruit in fruits : 
    fruit_name   = fruit["name"] 
    fruit_dict   = cur.execute("SELECT * FROM fruits where name = %s ;",fruit_name) 
    mydict[fruit["name"]] = fruit_dict 

print "---" 
print mydict  
print mydict["red_apple"] 
print mydict["banana"]["color"] 

след:

>>> --- 
{'red_apple': {'color': 'red', 'name': 'red_apple'}, 'banana': {'color': 'yellow', 'name': 'banana'}} 
{'color': 'red', 'name': 'red_apple'} 
yellow 
>>> 

Рекомендуемая литература (и библиотеки, которые делают именно это):

Смежные вопросы