在Python中遍历嵌套键值对列表
我想写一个Python脚本,这个脚本需要接收两个输入,一个是键值对的集合,另一个是一个嵌套列表。我想把这些键值对逐个应用到嵌套列表中的每一项上,用合适的新值来更新列表。这个嵌套列表是一些菜单数据。举个例子:
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']]
有没有人能给我一些建议,告诉我该用什么函数、策略或技巧来解决这个问题?我在开始的时候遇到了一些困难。谢谢大家的帮助!
3 个回答
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']]
维护这样一个列表是非常困难的。比如说,如果你想从菜单中找出所有的汉堡,你觉得需要多少次循环和比较呢?
不如试试用一个 字典
(链接):
>>> 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
这样的话,你可以一个一个地处理更新,轻松地更新每个值。
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
你的列表其实就是一个数组的数组。
这里有个更好的例子。
menu_data = [ { "name":"big mac", "price":"10.95"}, { "name":"Quarter Pounder", "price":"4.55"} ]
现在你有了一个物品的数组。
要遍历这个物品列表,你可以这样做:
for item in menu_data:
print "%s .... %i" % (item["name"], item["price"])
要在列表中添加一个快乐的汉堡:
item = { "name":"Happy Burger", "price":"3.99" }
menu_data.append(item)
简单说一下关于这些物品的事。 每个物品就像上面那样,是由任意数量的键值对组成的字典。
键 => 值
所以:
item = {"name":"John Taylor", "band":"Duran Duran"}
因为每个物品可以有任意数量的键,你可以用以下方式访问它们:
all_keys = item.keys()
这会给你一个数组,内容是 ["name", "band"]。 知道这一点后,你可以像这样遍历每个物品:
for key in item:
print "The key is %s and the item is : %s" % (key, item[key])
希望这能帮助你在学习Python的路上更进一步。