获取python dict的值

时间:2018-11-21 11:00:51

标签: python dictionary indexing

尝试索引python字典时出现语法错误:

(Pdb) o_model.flows
{(<oemof.solph.network.Bus object at 0x7f3e9c6b3ea8>, <oemof.solph.network.Transformer object at 0x7f3e9c52ce08>): <oemof.solph.network.Flow object at 0x7f3e9c50d5f8>}

这是字典的关键。

(Pdb) o_model.flows.keys()
dict_keys([(<oemof.solph.network.Bus object at 0x7f3e9c6b3ea8>, <oemof.solph.network.Transformer object at 0x7f3e9c52ce08>)])

所以我假设的是dict的(<oemof.solph.network.Bus object at 0x7f3e9c6b3ea8>, <oemof.solph.network.Transformer object at 0x7f3e9c52ce08>)

问题是我在尝试使用键索引o_model.flows时遇到语法错误。

通常我期望通过来获得字典的值(<oemof.solph.network.Flow object at 0x7f3e9c50d5f8>),但是却收到语法错误:

(Pdb) o_model.flows[(<oemof.solph.network.Bus object at 0x7f3e9c6b3ea8>, <oemof.solph.network.Transformer object at 0x7f3e9c52ce08>)]
*** SyntaxError: invalid syntax

我做错了什么?

一些额外功能:

(Pdb) type(o_model.flows)
<class 'dict'>

1 个答案:

答案 0 :(得分:2)

您的键是两个对象(总线,变压器)的元组,因此,为了对其进行索引,我想您必须在创建该字典时将该元组存储在某个地方,以便以后访问它或提取键。您可以使用:

my_key = list(o_model.flows.keys())[0]
print(o_model.flows[my_key])

示例:

test = {("qwe","zxc"): [4,5,6]}
print(test.keys()) # dict_keys([('qwe', 'zxc')])
my_key = list(testprint(.keys())[0]
print(flow[my_key]) # [4 5 6]
  • 为什么不能只输入(<oemof.solph.network.Bus object at 0x7f3e9c6b3ea8>, <oemof.solph.network.Transformer object at 0x7f3e9c52ce08>)作为键?

因为假设没有为打印分配任何字符串,那只是该对象的人类可读表示。公用键(例如字符串)也是某些位置的对象,例如(<str object at 0x7f45f4f52c36>),但打印时应将其字节解释为字符。

因此,不要使用打印出来的内容进行索引,而应该使用对象本身。

示例:

class ObjNoStr():
    def __init__(self, x):
        self.x = x

class ObjStr():
    def __init__(self, x):
        self.x = x

    def __str__(self):
        return "I have x: %d" % self.x

o1 = ObjNoStr(3)
o2 = ObjStr(3)
print(o1) # <__main__.ObjNoStr object at 0x7f36d38469b0>
print(o2) # I have x: 3