コードは鈍角であり、休憩それらをダウン。
また、ワンライナーを使用しないようにしよう、彼らは通常、あなたがそれらを入力することができますどれだけ速く以外の計算速度アップを持っていません。
あなたはそれでは、ダウンを破るせ
を反復しているか知っています。すべての要素のリストの反復のための辞書を作成し、リスト内包の複雑なプリントで
、我々は、次を参照してください。
print([{i[0] : i[1]} for i in wn.synset('person.n.01').hypernym_distances()])
ループ自体を簡素化することができるように見えます。最初にsynsetを保持する変数を設定します。 (私はあなたの代わりにのみのみperson.n.01
にそれを使用して、いくつかののsynsetに同じ操作をしたいと思うことを想定):person.hypernym_distances()
の
>>> person.hypernym_distances()
{(Synset('person.n.01'), 0), (Synset('organism.n.01'), 1), (Synset('whole.n.02'), 3), (Synset('physical_entity.n.01'), 5), (Synset('causal_agent.n.01'), 1), (Synset('entity.n.01'), 3), (Synset('living_thing.n.01'), 2), (Synset('physical_entity.n.01'), 2), (Synset('entity.n.01'), 6), (Synset('object.n.01'), 4)}
データ構造です:
person = wn.synset('person.n.01')
今度はperson.hypernym_distances()
リターンは何を見てみましょうすでにタプルのセットで、最初の要素が上位の要素で、2番目の要素が距離です。 Synset('entity.n.01')
は、set
タイプのため、person.hypernym_distances()
に1回しか発生しません。タプルのリストを反復処理することにより
タプルを反復処理するとき、あなたは簡単に(Unpacking a list/tuple of pairs into two lists/tuplesとHow can I iterate through two lists in parallel?を参照)、それを「解凍」できるループで
>>> from nltk.corpus import wordnet as wn
>>> wn.synset('person.n.01')
Synset('person.n.01')
>>> person = wn.synset('person.n.01')
>>> person.hypernym_distances()
{(Synset('person.n.01'), 0), (Synset('organism.n.01'), 1), (Synset('whole.n.02'), 3), (Synset('physical_entity.n.01'), 5), (Synset('causal_agent.n.01'), 1), (Synset('entity.n.01'), 3), (Synset('living_thing.n.01'), 2), (Synset('physical_entity.n.01'), 2), (Synset('entity.n.01'), 6), (Synset('object.n.01'), 4)}
>>> for ss, count in person.hypernym_distances():
... print (ss,'\t', count)
...
Synset('person.n.01') 0
Synset('organism.n.01') 1
Synset('whole.n.02') 3
Synset('physical_entity.n.01') 5
Synset('causal_agent.n.01') 1
Synset('entity.n.01') 3
Synset('living_thing.n.01') 2
Synset('physical_entity.n.01') 2
Synset('entity.n.01') 6
Synset('object.n.01') 4
をタプル/イテレート可能オブジェクトの反復可能な開梱
あなたは醜い(i[0], i[1]) for i in iterable_of_tuples
の構文を避けることができます。代わりに(a,b) for a,b in iterable_of_tuples
を実行します。 Dictの理解
対
一覧あなたは鍵がsynsetであり、値がカウントで辞書にperson.hypernym_distances()
からタプルを入れしようとしているように思えます。
あなたがlist comprehension
とdictionary comprehension
の間でトリップしたときに間違いが起こったと思います。 person.hypernym_distances()
にすべての要素の新しい辞書を作成する必要はありません。代わりに、私は辞書理解がつまり、あなたが探しているものだと思う:
>>> {ss:count for ss, count in person.hypernym_distances()}
{Synset('object.n.01'): 4, Synset('whole.n.02'): 3, Synset('living_thing.n.01'): 2, Synset('organism.n.01'): 1, Synset('entity.n.01'): 6, Synset('person.n.01'): 0, Synset('causal_agent.n.01'): 1, Synset('physical_entity.n.01'): 2}
上記の辞書が持つタプルの反復可能な特定のあなたが望むものであるならば、実際の辞書
にタプルのリストをキャスティング
>>> dict(person.hypernym_distances())
{Synset('object.n.01'): 4, Synset('whole.n.02'): 3, Synset('living_thing.n.01'): 2, Synset('organism.n.01'): 1, Synset('entity.n.01'): 6, Synset('person.n.01'): 0, Synset('causal_agent.n.01'): 1, Synset('physical_entity.n.01'): 2}
も
を参照してください。辞書に反復可能に鋳造タプルあたり2つの項目は、自動的にキーと値と第二のようにタプルの最初の項目を設定します
これを処理できるネイティブのPythonには、高性能のコンテナデータ構造があります。 https://docs.python.org/3/library/collections.html
StackOverflowへようこそhttps://stackoverflow.com/help/how-to-askをご覧ください。コードを書式設定して質問を言い換えることができますか?あなたが何を求めているのかは不明です。 – alvas
確認してください:)!@alvas –