1

ある順序でセクションがあるいくつかのドキュメントを解析しています。いくつかの構文解析の目的に一致するように、それらの順序を知る必要があります。今私はこれらのリストを持っています、ここに2つあります

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'

したがって、後で何かを処理するときに、オブジェクトが辞書のキーの1つと一致するかどうかを簡単にテストできます。

私の質問は、後でpossible_seq(uences)にいくつかの未知の番号を追加することです(現在、10の選択肢があります)このメッセージで行ったようにシーケンスをコードにキー入力し、コードを実行する前に新しいシーケンスを組み込むためにいくつかの変更を加えます。具体的には、次の範囲をインクリメントする必要があります

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がコードで定義されているため、Pythonが認識しているオブジェクトを利用できるようにするかどうか疑問に思いました。それらの名前が利用可能であることがわかりましたが、オブジェクト自体を取得/参照する方法がわかりません

それは私ができると思った

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

しかし、私は空のリストを取得します。名前が文字列であるため、これは興味深いものです。グローバルはオブジェクトの名前のリストを提供します。このコードが名前を提供する名前ではなく、実際のオブジェクトが必要です。

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 に答える