辞書a = {}
があり、次のような結果が必要だとします。
value = 12
a = {'a':value,'b':value,'f':value,'h':value,'p':value}
多くの場合などkeys:same value
。もちろん今はこのようにできます
a.update({'a':value})
a.update({'b':value})
などなど....しかし、値はすべてのキーで同じなので、これを行うためのよりPython的なアプローチはありませんか?
辞書a = {}
があり、次のような結果が必要だとします。
value = 12
a = {'a':value,'b':value,'f':value,'h':value,'p':value}
多くの場合などkeys:same value
。もちろん今はこのようにできます
a.update({'a':value})
a.update({'b':value})
などなど....しかし、値はすべてのキーで同じなので、これを行うためのよりPython的なアプローチはありませんか?
dict内包表記(python 2.7以降)を使用できます。
>>> v = 12
>>> d = {k:v for k in 'abfhp'}
>>> print d
{'a': 12, 'h': 12, 'b': 12, 'p': 12, 'f': 12}
必要なキーとデフォルト値を使用して新しい辞書を作成するのはどうですか。fromkeysメソッドを確認してください。
>>> value=12
>>> a=dict.fromkeys(['a', 'b', 'f', 'h', 'p'], value)
>>> print a
{'a': 12, 'h': 12, 'b': 12, 'p': 12, 'f': 12}
>>> a=dict(zip('abfhp',[12]*len('abfhp')))
>>> a
{'a': 12, 'h': 12, 'b': 12, 'p': 12, 'f': 12}
a = dict()
for key in keys:
a[key] = value
stummjrが指摘したように、特にpythonのすべてが辞書であるため、辞書の理解は理解して使用するのに役立ちます。
この問題の解決を検討できるもう1つの方法は、ラムダ関数によるものです。
makeDict = lambda keys, values: { k:v for k, v in zip(keys, values) }
makeDict( [1,2,3], list('abc') )
['a': 1, 'c': 3, 'b': 2]
これが明確さを追加する場合、makeDictが通常の関数として書き直されたように見えるものは次のとおりです。
def makeDict(keys, values):
return { k:v for k, v in zip(keys, values) }
とにかく、ラムダは遊ぶのが楽しいものになる可能性があります。また、これは最も堅牢な例ではありません。zipを使用するとデータが失われる可能性があります。正しく機能するには、両方のシーケンスが同じ長さである必要があります。Pythonは、両方のシーケンスから一致するペアができるまで繰り返します。次の例では、値の余分な要素がディクショナリに表示されないはずです。
{ k:v for k, v in zip( list('abc'), [1,2,3,4]) }
['a': 1, 'c': 3, 'b': 2]