循环通过3个级别的列表

时间:2016-02-18 05:24:21

标签: python

我正在尝试设置一个允许我循环3个级别的字典。例如:

1级:肉类,非肉类 2级:水果,蔬菜,猪,牛 3级:苹果,橘子,西兰花,胡萝卜,培根,火腿,排骨,牛排

我尝试过的字典如下:

X = {
"Meats":{
    "Pig":[["Bacon"], ["Ham"]], 
    "Cow":[["Ribs"], ["Steak"]]
    },
"Non-Meats":{
    "Fruit":[["Apple"], ["Oranges"]], 
    "Vegetable":[["Broccoli"], ["Carrots"]]
    }
} 

任何有关如何处理此事的建议都将受到赞赏。

2 个答案:

答案 0 :(得分:1)

解决这样一个问题需要的是逐步完成字典工作,找出你需要迭代的内容。

第一步: 你将如何遍历顶级字典键?

for key in X:
    do something

第二步:

Q :对于每个密钥,您需要迭代什么?

回答:另一个词典。所以,我们已经包括了上一步:

for key in X:
    for key_two in X[key]:
        do something

第3步:

Q :你最终在这些决定中有什么?

回答:列表列表(例如[["Bacon"]])。我不确定为什么每个都是一个列表,你可以让它们成为字符串。例如,{"Pig": ["Bacon", "Ham"]}。但是,对于你所拥有的,我们得到:

for key in X:
    for key_two in X[key]:
        for food in X[key][key_two]:
            print food # If you want to print without the list, it'd be either a final nested loop or "print food[0]"

答案 1 :(得分:1)

您要做的是创建嵌套字典。

有助于您了解正在创建的结构的一件事是正确的格式。有一种称为PEP8的格式标准,但只要你保持一致,就可以使用你想要的任何样式。

X = {
    "Meats": {
        "Pig": [
            ["Bacon"], ["Ham"]
        ],

        "Cow": [
            ["Ribs"], ["Steak"]
        ]
     },

     "Non-Meats": {
         "Fruit": [
            ["Apple"],  ["Oranges"]
        ],

        "Vegetable": [
            ["Broccoli"], ["Carrots"]
        ]
    }
}

这种格式化是否使结构更易于阅读?在我看来,每个内部项目周围的括号是不必要的,因为它们已经在列表的一部分

如果我们在没有那些内方括号的情况下重写'non-meats'字典项的Vegetable项,它看起来像这样:

"Vegetable": [
    "Broccoli", "Carrots"
]

然后你可以得到像这样的蔬菜列表:

veggies = x['Non-Meats']['Vegetable']

变量'veggies'现在是一个可迭代的列表。打印该列表将导致如下所示:

['Broccoli', 'Carrots']