我有一个名为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>
答案 0 :(得分:3)
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不允许我将输出粘贴到回复中。我不知道为什么。这应该工作。如果你还有困难,请告诉我。