如何在运行时访问未知对象而不是它们的名称

2024-04-23 16:40:31 发布

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

我正在分析一些文档,这些文档的节是按某种顺序排列的。我需要知道它们的顺序来匹配一些解析目标。现在我有两张单子

possible_seq_1 = [1, '1A', '1B', 2, 3, 4, 5, 6, 7, '7A',
           8, 9, '9A', '9B', 10, 11, 12, 13, 14, 15]


possible_seq_2 = [1, '1A', '1B', 2, 3, 4, 5, 6, 7, '7A',
           8, 9, '9A(T)', '9B', 10, 11, 12, 13, 14, 15]

我想使用上面列表中的项作为字典的键,该值将引导我进入下一步

my_dict = dict()
aKey =  = '_'.join([str(item) for item in possible_seq_1])
my_dict(aKey) = 'something'

因此,当我以后处理某些东西时,我可以简单地测试对象是否匹配字典中的某个键

我的问题是,我将要添加一些未知的数字(现在我有十个选择)到可能的seq(uences)以后我的关键序列到我的代码,因为我在这个消息,然后在我运行代码之前,我必须作出一些改变,以纳入我的新序列。具体来说,我必须在下面增加范围

my_dict = dict()
for sequence in range(1,10,1):
    dict_key = '_'.join([str(item) for item in possible_seq_ + str(sequence)
    my_dict[dict_key] = something

当我这么做的时候,我想知道Python是否提供了它所知道的对象,因为它们是在代码中定义的。我知道他们的名字是可用的,但我不知道如何获取/引用对象本身

那是我想我能做的

seq_list = [ item for item in globals() if 'possible_seq' in item if type(item) == list ]

但是,我得到一个空列表,这很有趣,因为名称是一个字符串,所以globals给了我一个对象名称的列表-我想要的是实际的对象,而不是这个代码给我的名称

seq_list = [ item for item in globals() if 'possible_seq' in item ]

我承认,当我在研究这个问题时,我意识到更简单的方法是将序列作为列表添加到序列列表中,但现在我对另一种方法感兴趣,只是为了提高我对Python的理解


Tags: 对象代码in列表forifmy序列
1条回答
网友
1楼 · 发布于 2024-04-23 16:40:31

诀窍在于globals()是一个字典,而不是一个列表,所以只要迭代globals()中的项就只得到它们的名称。由于要检查每个名称中是否有possible_seq,因此可以使用字典的.items()方法对名称和对象进行迭代:

[v for k, v in globals().items() if 'possible_seq' in k]

然而,正如你所猜测的,这不是一个好方法。最好保留一个列表,比如:

possible_seqs = [[1, '1A', '1B', 2, 3, 4, 5, 6, 7, '7A',
           8, 9, '9A', '9B', 10, 11, 12, 13, 14, 15],
                 [1, '1A', '1B', 2, 3, 4, 5, 6, 7, '7A',
           8, 9, '9A(T)', '9B', 10, 11, 12, 13, 14, 15]]

keep data out of your variable names。你知道吗

相关问题 更多 >