我想设置一个python脚本,它将采用2个输入(一组键值对和一个嵌套列表)。我想通过嵌套列表的每个项目迭代键值对的集合,使用键值对中的适当新值更新列表。嵌套列表是一组菜单数据。示例:
menu_data = [['mcdonalds', 'Lunch', 'Burgers', 'Big Mac', '10.95'],['mcdonalds', 'Lunch', 'Burgers', 'Quarter Pounder', '6.95'],['mcdonalds', 'Lunch', 'Burgers', 'Big Mac', '10.95']['mcdonalds', 'Lunch', 'Burgers', 'Bacon Cheeseburger', '12.95']]
键:值对也将包含在嵌套列表中以启动。它们是以下项目的价格更新。例如:
updates = [['Big Mac', '9.95'], ['Quarter Pounder', '8.95'],['Bacon Cheeseburger', '11.95']]
任何人都可以在正确的方向上轻松推动解决此问题的最佳功能/策略/技巧。无法入门。谢谢你的帮助!
答案 0 :(得分:1)
我使用下面的函数来查找所需的键并返回其值。所以,我遍历列表,对于该列表中的每个字典,我调用此函数来确定它是否是我正在寻找的项目(字典)。然后我将执行所需的操作(更新,发送到模板等)。
def find_value(dic, key):
""" return the value of dictionary dic given the key """
if key in dic:
return dic[key]
else:
return "key:'" + key + "'is not a valid key"
我意识到这可能不会直接回答你的问题,但它可能会激发一些想法,让你到达你想成为的地方。祝你好运!
答案 1 :(得分:0)
您的列表只是一个数组数组。
这是一个更好的例子。
menu_data = [ { "name":"big mac", "price":"10.95"}, { "name":"Quarter Pounder", "price":"4.55"} ]
现在你有了一系列的物品。
要迭代此项列表,请执行f.ex:
for item in menu_data:
print "%s .... %i" % (item["name"], item["price"])
在列表中添加一个快乐汉堡:
item = { "name":"Happy Burger", "price":"3.99" }
menu_data.append(item)
只是解释一下这些项目。 上面完成的每个项目都是任意数量的键值词典。
Key =>值
所以:
item = {"name":"John Taylor", "band":"Duran Duran"}
因为每个项目可以有任意数量的键,您可以使用
访问它们all_keys = item.keys()
这将为您提供一系列["名称","乐队"] 知道了,你可以迭代每个项目,如:
for key in item:
print "The key is %s and the item is : %s" % (key, item[key])
我希望这可以帮助你在Python上变得更好。
答案 2 :(得分:0)
我建议您重新构建菜单数据结构,以简化将来的更新和维护。
menu_data = [['mcdonalds', 'Lunch', 'Burgers', 'Big Mac', '10.95'],['mcdonalds', 'Lunch', 'Burgers', 'Quarter Pounder', '6.95'],['mcdonalds', 'Lunch', 'Burgers', 'Big Mac', '10.95']['mcdonalds', 'Lunch', 'Burgers', 'Bacon Cheeseburger', '12.95']]
维护这样的清单非常困难。 例如,如果您想从菜单中检索所有汉堡包,您认为您将进行多少次迭代和比较,该怎么办?
如何使用dictionary
(link):
>>> menu_data = {'mcdonalds' : { 'Lunch' : { 'Burgers': {
'Big Mac': 10.95,
'Quarter Pounder': 6.95,
'Bacon Cheeseburger': 12.95
}
}
}
}
>>> menu_data
{'mcdonalds': {'Lunch': {'Burgers': {'Big Mac': 10.95, 'Bacon Cheeseburger': 12.95, 'Quarter Pounder': 6.95}}}}
>>> menu_data.get('mcdonalds').get('Lunch').get('Burgers')['Big Mac']
10.95
>>> menu_data.get('mcdonalds').get('Lunch').get('Burgers')['Big Mac'] = 9.95
>>> menu_data.get('mcdonalds').get('Lunch').get('Burgers')['Big Mac']
9.95
在这种情况下,您可以逐个浏览更新,并轻松更新每个值。