2016-07-28 25 views
0

の変数のリストには、I割り当て値はパイソン

def f(a): 
    return tuple([x for x in range(a)]) 

d = {} 
[d['1'],d['2']] = f(2) 
print d 
# {'1': 0, '2': 1} 
# Works 

は今のキーは、プログラム私はこのような場合のために同じことを達成するにはどうすればよい
を生成しているとし、より複雑な問題の小さなデモをしましたか?

n = 10 
l = [x for x in range(n)] 
[d[x] for x in l] = f(n) 
print d 
# SyntaxError: can't assign to list comprehension 
+3

ループを使用する....... –

+2

'{i + 1:i for f(n)} ' –

+0

期待される結果は? –

答えて

1

これは、代入文の構文的な機能です。動的なことをすると、別の構文が使用されるため、動作しません。簡単に辞書のように書き直される

d = {} 
for key, value in zip(keys, f()): 
    d[key] = value 

あなたには、いくつかの機能がf()とキーkeysのリストをもたらしている場合は、あなたがそれらの上キーと結果の反復可能、およびループを作成するためにzipを使用することができます読解:でも

として、@JonClementsで述べたように、この特定のケースでは

d = {key: value for key, value in zip(keys, f())} 

あるいは、

+3

Or ... 'd = dict(zip(keys、f()))' –

+0

ありがとう、編集されました。 – RemcoGerlich