以下は、基数ツリーに IP プレフィックスを格納し、IP がプレフィックスに属している場合は、IP と ASN をディクショナリに関連付ける Python のコード スニペットです。
特定のプレフィックスのさまざまな ASN をすべて見つけたいと考えています。詳細を以下に示します。
#rtree is a radix tree which has prefixes stored.
rtree = radix.Radix()
with open(path-to-prefix-file,'r') as fp:
for line in fp:
rnode = rtree.add(line) # Eg, Prefixes like "192.168.2.0/24"
rnode.data["count"]= 0
...
# The code has several lines here for processing a capnproto - skipping them.
rnode.data[IP]=asn_complete # I read a Capnproto buffer and store IP and asn_complete
...
for rnode in rtree:
seen_list = [] # defining a list to store different val, i.e.,asn_complete values
if rnode.data["count"] > 1:
""" Iterate through the rnode.data dictionary """
for ip,val in rnode.data.iteritems():
if val not in seen_list: # Condition is always satisfied!!
seen_list.append(val)
例:val
は、いくつかの反復で protobuf から次の値を取得します。
[<capnp list reader [15169]>, <capnp list reader [1239]>, <capnp list reader [4837]>]
を印刷するとseen_list
:
[[<capnp list reader [15169]>, <capnp list reader [1239]>, <capnp list reader [4837]>], [<capnp list reader [15169]>, <capnp list reader [1239]>, <capnp list reader [4837]>], [<capnp list reader [15169]>, <capnp list reader [1239]>, <capnp list reader [4837]>],....]
明らかval
に入っていseen_list
ます。しかし、if val not in seen_list:
常に真であり、何度もval
追加されます。seen_list
条件が常に true を返す理由がわかりません。に格納されているオブジェクトの種類が原因seen_list
ですか?