如果我有一个包含列表的字典,请执行以下操作:
{"items": [{"name": "Orange", "cost": 5}, {"name": "Apple", "cost": 10}]}
是否有可能以某种方式从两个列表中获取“名称”和“费用”键? 这只是因为每次我在同一个列表中添加新字典时我都不想添加另一行。
答案 0 :(得分: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
如果你想要列表a['items']
中的词典的键名,你可以使用.keys()
来获取它们:
>>> for a_d in a_dict['items']:
print a_d.keys()
这给出了:
['cost', 'name']
['cost', 'name']
答案 1 :(得分: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)
答案 2 :(得分: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
答案 3 :(得分: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