在Python中遍历嵌套键值对列表

1 投票
3 回答
5824 浏览
提问于 2025-04-18 05:07

我想写一个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的路上更进一步。

撰写回答