2017-10-26 4 views
0

これはthisからです。私は理解しようとしています。これはPythonではどういう意味ですか? counts = {x:yのx、yのcounts.items()のxがself.symbolsの場合}

counts = {x: y for x, y in counts.items() if x in self.symbols}

私のpythonに新しいですし、.NETに、このアプリケーション全体を変換しようとしています。助けてくれてありがとう。

+0

のような短い形式で書くことができます(https://docs.python.org/3/tutorial/datastructures.html#list-comprehensionsを[リストの内包表記]を見てみましょう)それの背後にある構文とアイデアに慣れるために – Felk

+0

それはドットネット相当のものです: 'counts.Where(kvp => this.symbols.Contains(kvp.Key))。ToDictionary(kvp => kvp.Key、kvp => kvp.Value); ' – mshsayem

答えて

0

あなたのスニペットは、キーによって辞書をフィルタリングします。 C#で

{x: y # create a key value pair from key and value (this basically copies the entry of counts 
for x, y in counts.items() # this iterates over all key value pairs in the counts dict (x is the key, y is the value) 
if x in self.symbols # only perform line 1 if they current key x is included in the list 'symbols'. 

これは次のようになります。これは辞書内包表記である

counts = counts.Where(kv => symbols.Contains(kv.Key)) // this is the filter (line 3 from above) 
       .ToDictinoary(kv => kv.Key, kv => kv.Value); // this creates the dict (line 1 from above) 
0

提供元の1ライナーは、辞書インスタンス(counts)を更新し、self.symbolsにない要素を削除し、効果的にフィルタリングするcountsとなります。

基本的に辞書countsであり、どのように行われていることcountsの各キーと値のペア(x, y)がチェックされていることであり、唯一のキーxself.symbolsに存在するためのキーと値のペアを含む新しい辞書インスタンスであります作成した。最後に、新しく作成された辞書インスタンスはcountsに割り当てられます。この技術の正式名称は辞書理解です。

次のコードは、あなたによく知られているように見えますが、あなたの質問に与えたものと同じです。

filtered_counts = {} 
for x, y in counts.items(): 
    if x in self.symbols: 
     filtered_counts[x] = y 
counts = filtered_counts 
0

dict理解

それはdictを返し理解です。本質的には、それはcounts.items()を通して一対の値を反復し、それからdict(key - > valueのマッピング)を作成します。

たとえば、counts.items()[(1, 2), (3, 4), (5, 6)]です。その後、for x, y in counts.items()は、次のように反復します:

x = 1, y = 2 
x = 3, y = 4 
x = 5, y = 6 

if x in self.symbolsは理解をフィルタリングします。したがって、self.symbolsが、例えば[1, 4, 5]だった場合、それはx = 1, y = 2x = 5, y = 6までしか反復しません。

その後、最終辞書は次のとおりです。

{ 
    1: 2, 
    5: 6 
} 
0

。コードのいくつかの5行は、この

counts = {x: y for x, y in counts.items() if x in self.symbols}