2014-08-29 5 views
-1

Если у меня есть словарь, содержащий список, как это:Получить все ключи из списка словарей

{"items": [{"name": "Orange", "cost": 5}, {"name": "Apple", "cost": 10}]} 

было бы возможно получить ключи «имя» и «стоимости» из обоих списков в некоторых путь? Это просто по той причине, что я не хочу добавлять другую строку каждый раз, когда добавляю что-то новое в словарь в том же списке.

+0

Не могли бы вы привести пример того, чего вы пытаетесь достичь? Возможно, дайте нам код, который у вас есть сейчас, и мы можем дать дальнейшие указания –

+0

, какое представление данных вы хотите? Я думаю, что словари внутри списка - это то, что вы хотите. ваша цель неясна. – HuStmpHrrr

+0

Я хочу получить как «имя», так и «стоимость» из словарей внутри списка, но у меня уже есть достойный ответ. : P – Snowstormer

ответ

1

Я предполагаю, что, получив ключи, вы имели в виду значения, связанные с этими ключами.

a['items'] есть список. Просто перейдите через него и получите доступ к значениям name и cost, так как вы можете получить доступ к любому словарю.

>>> a_dict = {"items": [{"name": "Orange", "cost": 5}, {"name": "Apple", "cost": 10}]} 
>>> for a_d in a_dict['items']: 
     print 'Name: {} Cost: {}'.format(a_d['name'], a_d['cost']) 

Это дает:

Name: Orange Cost: 5 
Name: Apple Cost: 10 

Если Infact вы хотите ключевые имена словарей в списке a['items'] вы можете получить их с помощью .keys():

>>> for a_d in a_dict['items']: 
     print a_d.keys() 

Это дает:

['cost', 'name'] 
['cost', 'name'] 
+0

Это то, что мне нужно, спасибо! :) – Snowstormer

0

Лучший способ избежать дублирования кода - использовать функцию.

def get_name_and_cost(d): 
    return d['name'], d['cost'] 

for d in lst['items']: 
    name, cost = get_name_and_cost(d) 
    print(name, cost) 
0

Если у вас есть несколько групп «предметов», это будет проходить через каждую группу в вашем словаре.

d = {"fruit": [{"name": "Orange", "cost": 5}, {"name": "Apple", "cost": 10}], 
    "vegetables": [{"name": "carrot", "cost": 5}, {"name": "eggplant", "cost": 10}]} 

for group, items in d.items(): 
    for item in items: 
     print item['name'] 

>>> 
carrot 
eggplant 
Orange 
Apple 
0

Я думаю, что более динамичным, многоразовым подходом было бы сделать функцию.

def get_values(d, *keys): 
    t = [] 
    for k in keys: 
     if k in d.keys(): 
      t.append(d[k]) 
     else: 
      t.append(None) 
    return t 

или

def get_values(d, *keys): 
    return [ d[k] if k in d.keys() else none for k in keys] 

, то вы можете делать такие вещи, как это!

>>> d = {"items": [{"name": "Orange", "cost": 5}, {"name": "Apple", "cost": 10}]} 
>>> for item in d["items"]: 
...  print "Name {}, Cost {}".format(*get_values(item, "name", "cost")) 
... 
Name Orange, Cost 5 
Name Apple, Cost 10 
Смежные вопросы