是否可以在dict中为单个元素使用多个键?

时间:2012-12-12 18:10:34

标签: python dictionary

我正在编写自己的函数来将XML文本解析为对象,这些对象可以操作并呈现回XML文本。为了处理嵌套,我允许XML对象包含其他XML对象作为元素。

由于我自动生成这些XML对象,我的计划是在创建dict时将它们作为dict的元素输入。我计划生成一个名为name的属性,我可以将其用作键,并使XML对象本身成为分配给该键的值。

这一切对我来说都是有道理的。但现在我意识到我还想保存一个名为line_number的属性,这个属性是我第一次遇到该对象的原始XML文件中的行,并且在某些情况下我可能想要找到它line_number的XML对象,而不是名称。

所以这些是我的问题:

  1. 是否可以使用dict,以便我可以通过名称或行号找到我的XML对象 ?也就是说,是否可以将多个键分配给dict中的单个值?
  2. 我该怎么做?
  3. 如果这是一个坏主意,那么更好的方法是什么?

3 个答案:

答案 0 :(得分:2)

是的,有可能。不需要特别的魔力:

In [1]: val = object()

In [2]: d = {}

In [3]: d[123] = val

In [4]: d['name'] = val

In [5]: d
Out[5]: {123: <object at 0x23c6d0>, 'name': <object at 0x23c6d0>}

但是,我会使用两个单独的词典,一个用于按名称索引,另一个用于按行号索引。即使名称和行号完全不相交,我认为这是一个更简洁的设计。

答案 1 :(得分:2)

my_dict['key1'] = my_dict['key2'] = SomeObject

应该工作正常我会想

答案 2 :(得分:1)

由于字典可以包含多种类型的键,并且您使用名称(仅字符串)作为一个键而数字(仅限整数)作为另一个键,您可以简单地使两个单独的条目指向同一个对象 - 一个用于数字和一个字符串。

dict[0] = dict['key'] = object1