Python 3 - 在单个.py文件中访问多个词典

时间:2015-12-05 04:02:09

标签: python python-3.x dictionary

我有一个名为foods.py的文件,其中包含3个词典(foodA,foodB和foodC)。如果我要将食物导入另一个.py文件,那么在使用具有“导入食物”的脚本时,如何打印(或访问)字典名称(foodA,foodB和foodC)?我使用的是Python 3。

-------------------foods.py-------------------
foodA = {'Protein': '10','Carbs': '80','Fat': '10'}
foodB = {'Protein': '20', 'Carbs': '0', 'Fat': '102'}
foodC = {'Protein': '90', 'Carbs': '10', 'Fat': '100'}

我尝试过以下方法:

import foods

for x in foods:
    print(foods.x)

但是,这并不起作用,因为食物不可迭代。我正在寻找以下输出:

foodA
foodB
foodC

对于第二部分,我如何访问每个字典的每个元素?我已将以下内容作为示例。

import foods

print(foods.foodA['Protein'])
print(foods.foodA['Carbs'])
print(foods.foodB['Protein'])
print(foods.foodB['Carbs'])
print(foods.foodC['Protein'])
print(foods.foodC['Carbs'])

这适用于访问密钥的值,但我正在寻找一个可迭代的'方法所以我不需要输入每个单独的陈述。此示例在一个文件中只有3个字典,但我的程序在单个.py文件中有200多个字典。

所以,我正在寻找最有效的方法:(1)在单个.py文件中打印出每个字典的名称,以及(2)在单个.py文件中访问每个字典的键/值对。 / p>

5 个答案:

答案 0 :(得分:3)

正如Larry Lustig所说。只需创建称为食物的嵌套词典

for key,val in foods.items():
    print(key)
    for _key,_val in val.items():
        print("\t"+str(_key)+" "+str(_val))

然后,您可以使用类似

的内容访问所有元素的值
foodB
    Carbs 0
    Fat 102
    Protein 20
foodC
    Carbs 10
    Fat 100
    Protein 90
foodA
    Carbs 80
    Fat 10
    Protein 10

这会给你:

{{1}}

答案 1 :(得分:2)

您可以使用dir()读出模块导出的所有符号名称列表,然后您可以通过模块的__dict__属性查找其值。

import foods
foods_names = [name for name in dir(foods) if name.startswith('food')]
foods_values = dict((name, foods.__dict__[name]) for name in foods_names)
print(foods_values)

结果:

{'foodB': {'Fat': '102', 'Protein': '20', 'Carbs': '0'},
 'foodA': {'Fat': '10', 'Protein': '10', 'Carbs': '80'},
 'foodC': {'Fat': '100', 'Protein': '90', 'Carbs': '10'}}

答案 2 :(得分:2)

我不确定这是否是你要找的:

<强> foods.py:

foods = {
    'foodA': {'Protein': '10','Carbs': '80','Fat': '10'},
    'foodB': {'Protein': '20','Carbs': '0','Fat': '102'},
    'foodC': {'Protein': '90','Carbs': '10','Fat': '100'}
}

您的代码(主文件):

from foods import foods

for food in foods:
    foodKey = (food)
    for attribute in foods[foodKey].items():
        print attribute[0], attribute[1]

<强>结果:

Protein 10
Carbs 80
Fat 10
Protein 90
Carbs 10
Fat 100
Protein 20
Carbs 0
Fat 102
[Finished in 0.0s]

答案 3 :(得分:1)

for x in foods:这样的命令不起作用,因为你没有名为foods的变量或实体,也没有任何行为像食物集合。您只有三个独立的食品,您必须按名称对其进行处理,例如for x in (foodA, foodB, foodC):

随着食物数量的增长,这会变得乏味。因此,您应该像这样重写foods.py:

foods = {
   'foodA' : {'Protein': '10','Carbs': '80','Fat': '10'}
   'foodB' : {'Protein': '20', 'Carbs': '0', 'Fat': '102'}
   'foodC' : {'Protein': '90', 'Carbs': '10', 'Fat': '100'}
}

现在你可以写

from foods import foods

for x in foods.keys():
   print(x)

print foods['foodA']['Protein']

答案 4 :(得分:1)

首先,确保这两个文件位于同一目录中,然后使用以下格式:

    from foods import foodA
    from foods import foodB
    from foods import foodC

    print(foodA)
    print(foodB)
    print(foodC)

    print(foodA["Carbs"])

标题会将代码调用到新文件中。我打印了这些词典,只是为了告诉你它是否奏效。接下来,我从FoodA调用了一个密钥,以便产生正确的结果。您可以使用此方法根据需要调用尽可能多的字典。不幸,。 Stack Overflow不允许我将输出粘贴到回复中。我不知道为什么。这应该工作。如果你还有困难,请告诉我。