0

私がやりたいことは簡単です:

collection = {'a':[], 'b':[], 'c':[]}
values = [1,2,3]

次を生成する関数を作成したい: (値を辞書のリスト要素に追加します。diclistは同じ長さです)

{'a':[1], 'b':[2], 'c':[3]}

これは非常に簡単で、いくつかの を使用して実行できます for x in。しかし、私はこれを1行でやりたいです。(同じ行で 2 つのループを使用)、構文を機能させることができません。

これに似たいくつかのことを試しましたが、すべて構文エラーになります。

collection[c].append(value), for c in d.iteritems(), for value in values
4

1 に答える 1

2

やりたいことを一行でやることはできません。ただし、1行で新しい辞書を作成できます。

{k: collection[k] + [v] for k, v in zip(collection.keys(), values)}

結果:

>>> collection = {'a':[], 'b':[], 'c':[]}
>>> values = [1,2,3]
>>> {k: collection[k] + [v] for k, v in zip(collection.keys(), values)}
{'a': [1], 'c': [2], 'b': [3]}

これは、dict理解と呼ばれます。リスト内包表記やジェネレータ式のように、そのうちの1つで複数のループを使用できますが、ここでは必要ありません。からのキーとからの整数zip()をペアにします。collectionvalues

インプレースを変更するdictには、少なくとも2行を使用する必要があります。

for k, v in zip(collection.keys(), values):
    collection[k].append(v)

Pythonはそれを一行で受け入れますが、それは私があなたのために調べることができるほぼすべてのスタイルガイドに反します:

for k, v in zip(collection.keys(), values): collection[k].append(v)

Pythonは、行を式のタプルとして解釈し(コンマによってタプルになります)、式の2つがforステートメントであり、式で使用できないため、構文エラーをスローします。

于 2012-11-26T08:33:18.383 に答える