1

我正在解析一些按某种顺序包含部分的文档。我需要知道它们的顺序以匹配一些解析目标。现在我有这些清单,这里有两个

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'

因此,当我稍后处理某些内容时,我可以简单地测试该对象是否与我的字典中的一个键匹配

我的问题是,稍后我将向 possible_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 的理解

4

1 回答 1

3

诀窍是它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]]

请参阅将数据保留在变量名之外

于 2013-03-09T21:37:39.067 回答