Python中的Dicts

时间:2015-02-24 17:04:51

标签: python dictionary

我有一个多维度字典,我需要返回一个特定值。

ConsomRatio={"DAP_Local":[],"MAP11_52":[]}
ConsomRatio["DAP_Local"].append({"Ammonia":"0.229", "Amine":"0.0007"})
ConsomRatio["MAP11_52"].append({"Ammonia":"0.138", "Fuel":"0.003"})

print(ConsomRatio["DAP_Local"])

印刷的结果是:

[{'Ammonia': '0.229', 'Amine': '0.0007'}]

我的问题是:有没有办法归还" Ammonia"只有,在" DAP_Local" ?

谢谢!

4 个答案:

答案 0 :(得分:7)

你可以这样做。您将dict追加到list,因此您必须在list所在的dict中选择正确的索引。在这种情况下,列表或索引0中的第一个元素。

ConsomRatio["DAP_Local"][0]["Ammonia"]

顺便说一下,根据你想要实现的目标,你可能想看看多维决策的不同实现的其他答案。

答案 1 :(得分:4)

其他答案当然是正确的,但您是否考虑使用“dicts dict”?即:

ConsomRatio={"DAP_Local":{},"MAP11_52":{}}
ConsomRatio["DAP_Local"].update({"Ammonia":"0.229", "Amine":"0.0007"})
ConsomRatio["MAP11_52"].update({"Ammonia":"0.138", "Fuel":"0.003"})

print ConsomRatio["DAP_Local"]["Ammonia"]
0.229

答案 2 :(得分:3)

因为print(ConsomRatio["DAP_Local"])返回一个长度为1的数组,你需要选择索引0,然后按照上面的'Ammonia'值键。

如果print(ConsomRatio["DAP_Local"])返回了字典,则无需让[0]print(ConsomRatio["DAP_Local"]['Amomonia'])工作

答案 3 :(得分:2)

无论如何,你为什么把名单列入你的词典?你可以在你的主要词典中使用dicts。

你也可以在没有列表的情况下使用多维词典,例如:

ConsomRatio = {}
ConsomRation["DAP_Local"] = {"Ammonia":"0.229", "Amine":"0.0007"}
ConsomRatio["MAP11_52"] = {"Ammonia":"0.138", "Fuel":"0.003"}

print(ConsomRatio["DAP_Local"]["Ammonia"])

将无需额外的努力即可获得所需的结果。

你可以在Python中缩短时间:

ConsomRatio = {
   "DAP_Local": {"Ammonia":"0.229", "Amine":"0.0007"},
   "MAP11_52" : {"Ammonia":"0.138", "Fuel":"0.003"},
}

print(ConsomRatio["DAP_Local"]["Ammonia"])

还要回答您的最新问题(在第二条评论中):

to_produce  = 'DAP_Local'
ingredience = 'Ammonia'
print('To produce {to_produce} we need {amount} of {ingredience}'.format(
      to_produce=to_produce, ingredience=ingredience,
      amount=ConsomRatio[to_produce].get(ingredience, '0.0')))

我希望,这有帮助!

它变得更好:

for product, ingred_list in ConsomRatio.items(): 
    for iname, ivalue in ingred_list.items(): 
        print('To produce {to_produce} we need {amount} of {ingredience}'
              .format(to_produce=product, ingredience=iname, 
                      amount=ivalue))