これは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に、このアプリケーション全体を変換しようとしています。助けてくれてありがとう。
これは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に、このアプリケーション全体を変換しようとしています。助けてくれてありがとう。
あなたのスニペットは、キーによって辞書をフィルタリングします。 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)
提供元の1ライナーは、辞書インスタンス(counts
)を更新し、self.symbols
にない要素を削除し、効果的にフィルタリングするcounts
となります。
基本的に辞書counts
であり、どのように行われていることcounts
の各キーと値のペア(x, y)
がチェックされていることであり、唯一のキーx
がself.symbols
に存在するためのキーと値のペアを含む新しい辞書インスタンスであります作成した。最後に、新しく作成された辞書インスタンスはcounts
に割り当てられます。この技術の正式名称は辞書理解です。
次のコードは、あなたによく知られているように見えますが、あなたの質問に与えたものと同じです。
filtered_counts = {}
for x, y in counts.items():
if x in self.symbols:
filtered_counts[x] = y
counts = filtered_counts
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 = 2
とx = 5, y = 6
までしか反復しません。
その後、最終辞書は次のとおりです。
{
1: 2,
5: 6
}
。コードのいくつかの5行は、この
counts = {x: y for x, y in counts.items() if x in self.symbols}
のような短い形式で書くことができます(https://docs.python.org/3/tutorial/datastructures.html#list-comprehensionsを[リストの内包表記]を見てみましょう)それの背後にある構文とアイデアに慣れるために – Felk
それはドットネット相当のものです: 'counts.Where(kvp => this.symbols.Contains(kvp.Key))。ToDictionary(kvp => kvp.Key、kvp => kvp.Value); ' – mshsayem