是否可以对dict中的单个元素使用多个键?

2024-03-28 12:47:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写自己的函数,用于将XML文本解析为可以操作并渲染回XML文本的对象。为了处理嵌套,我允许XML对象包含其他XML对象作为元素。你知道吗

因为我是自动生成这些XML对象的,所以我的计划是在创建它们时将它们作为dict的元素输入。我计划生成一个名为name的属性,我可以将其用作键,并将XML对象本身指定给该键。你知道吗

在这一点上,所有这些对我来说都是有意义的。但是现在我意识到我真的很想保存一个名为line_number的属性,它是我第一次遇到对象的原始XML文件中的一行,在某些情况下,我可能希望通过line_number而不是通过名称来定位XML对象。你知道吗

我的问题是:

  1. 有没有可能使用dict,使我可以通过名称或行号找到我的XML对象?也就是说,在一个dict中有没有可能将多个键分配给一个值?你知道吗
  2. 我该怎么做?你知道吗
  3. 如果这是个坏主意,有什么更好的办法?你知道吗

Tags: 文件对象函数name文本名称元素number
3条回答

是的,这是可能的。无需特殊魔法:

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>}

不过,我会使用两个单独的词典,一个用于按名称索引,另一个用于按行号索引。即使名称和行号集完全不相交,我认为这是一个更干净的设计。你知道吗

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

我想应该可以

由于字典可以有多种类型的键,并且您将名称(仅限字符串)用作一个键,将数字(仅限整数)用作另一个键,因此只需将两个单独的条目指向同一对象—一个用于数字,另一个用于字符串。你知道吗

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

相关问题 更多 >