36

私はPythonでいくつかのループで遊んでいます。私は「for」ループの使用に精通しています。

for x in y:
    do something

ループを使用して単純なリストを作成することもできます。

i = []
for x in y:
   i.append(x)

そして最近、リストを作成するための効率的なタイプのループをここスタックで発見しました (このタイプのループの名前はありますか? 知りたいので、もう少しうまく検索できます):

[x.name for x in y]

そうは言っても、最後のタイプのループをさらに進めたいと思い、同じタイプのロジックを使用して Python 辞書を作成しようとしました。

{x[row.SITE_NAME] = row.LOOKUP_TABLE for row in cursor}

使用する代わりに:

x = {}
for row in cursor:
   x[row.SITE_NAME] = row.LOOKUP_TABLE

無効な構文であるという等号のエラー メッセージが表示されます。この場合、基本的には、等号は条件節 (==) であり、変数の宣言ではないことを示していると思います。

2 番目の質問は、このタイプのループを使用して Python 辞書を作成できますか、それともベースから外れていますか? もしそうなら、私はそれをどのように構成しますか?

4

3 に答える 3

58

短い形式は次のとおりです (リスト内包表記、セット内包表記などに類似して、辞書内包表記と呼ばれます)。

x = { row.SITE_NAME : row.LOOKUP_TABLE for row in cursor }

したがって、一般に_container、いくつかの種類の要素と、_value特定の要素に対してディクショナリのこのキーに追加する値を返す関数を指定すると、次のようになります。

{ _key : _value(_key) for _key in _container }
于 2013-10-01T16:50:57.023 に答える
9

使用しているものは、リスト内包表記と呼ばれます。彼らはかなり素晴らしいです;)

それらには、リスト内包表記のように機能するジェネレーター式と呼ばれるいとこがありますが、リストを一度にすべて作成するのではなく、一度に 1 つの項目を生成します。したがって、ネームジェネレーター。ジェネレーターである関数を作成することもできます。ただし、その情報をカバーする質問やサイトはたくさんあります。

次の 2 つのいずれかを行うことができます。

x = dict(((row.SITE_NAME, row.LOOKUP_TABLE) for row in cursor))

または、十分に新しいバージョンの Python を使用している場合は、辞書内包表記と呼ばれるものがあります。これは、リスト内包表記のように機能しますが、代わりに辞書を生成します。

x = {row.SITE_NAME : row.LOOKUP_TABLE for row in cursor}
于 2013-10-01T16:55:13.927 に答える
6

次のように実行できます。

x = dict((row.SITE_NAME, row.LOOKUP_TABLE) for row in cursor)
于 2013-10-01T16:52:44.337 に答える