私はこのような辞書を持っています:
{'targets': [{'hosts': ['google.fr'],
'tags': {'country': 'fr',
'server': 'french'}},
{'hosts': ['amazon.es'],
'tags': {'country': 'es',
'server': 'spain'}},
{'hosts': ['facebook.de'],
'tags': {'country': 'de',
'server': 'germany'}},
{'hosts': ['server1.fr', 'server2.fr', 'server3.fr'],
'tags': {'country': 'fr',
'server': 'french'}}]}
基本的に、任意の深さのネストされたリスト、辞書、および文字列を含む辞書。
これをトラバースして、最も近いキー「タグ」を抽出するための最良の方法は何ですか?「ホスト」は私の検索に等しいですか?
私の試み:
#host = 'google.fr' or 'amazon.es' or 'facebook.de' or 'server1.fr' or 'server2.fr' or 'server3.fr'
for [idx, val] in enumerate(targets['targets']):
h = targets['targets'][idx]['hosts']
for i in h:
if i == host and 'tags' in targets['targets'][idx]: # if equal to host and 'tags' key exist
t = targets['targets'][idx]['tags']
tags = ','.join("{!s}={!r}".format(key,val) for (key,val) in t.items())
tags = tags.replace("'", "")
pprint ("host: '{}'".format(host))
pprint("tags: '{}'".format(tags))
結果:
"host: 'google.fr'"
"tags: 'country=fr,server=french'"
"host: 'amazon.es'"
"tags: 'country=es,server=spain'"
"host: 'facebook.de'"
"host: 'server1.fr'"
"tags: 'country=fr,server=french'"
"host: 'server2.fr'"
"tags: 'country=fr,server=french'"
"host: 'server3.fr'"
"tags: 'country=fr,server=french'"
私はPythonの専門家ではないので、パフォーマンスを向上させることができると確信しています。
基準:
wwii azro
real 0m0,087s 0m0,057s
user 0m0,071s 0m0,027s
sys 0m0,015s 0m0,028s
real 0m0,078s 0m0,067s
user 0m0,068s 0m0,056s
sys 0m0,009s 0m0,010s
real 0m0,074s 0m0,058s
user 0m0,062s 0m0,024s
sys 0m0,011s 0m0,034s
azroのパフォーマンスが向上しているようです:)
インデックス付きの反復を削除して、同等ではなくホストの包含を探すことができます
host = "google.fr"
for target in targets['targets']:
if host in target['hosts'] and 'tags' in target:
tags = ','.join("{!s}={!r}".format(key, val) for (key, val) in target['tags'].items())
tags = tags.replace("'", "")
print("host: '{}'".format(host))
print("tags: '{}'".format(tags))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加