このようなことを行うことは可能ですか:
def f():
d={}
d[1]='qwe'
d[2]='rty'
return d
a,b=f()[1:2]
a,b=f()[1],f()[2]
ではない
t=f()
a,b=t[1],t[2]
余分な行を避けて、関数を 1 回だけ呼び出します。
このようなことを行うことは可能ですか:
def f():
d={}
d[1]='qwe'
d[2]='rty'
return d
a,b=f()[1:2]
a,b=f()[1],f()[2]
ではない
t=f()
a,b=t[1],t[2]
余分な行を避けて、関数を 1 回だけ呼び出します。
あなたが何をしたいのか正確にはわかりません。整数で辞書にインデックスを付けています。整数は辞書のキーとして問題なく使用できますが、あなたの場合はリストの方が理にかなっているように見えます。辞書とリストの重要な違いは、辞書が順序付けされていないことです。あなたの例では、必ずしも1位と2位になるd[1]
とは限りません。d[2]
したがって、順序に依存する場合、標準の辞書はとにかく機能しません (OrderedDict
そうなるでしょう)。
(データ構造が関数によって返されるという事実は、f()
ここでは何の違いもないので、読みやすくするために無視します)
あなたが得た場合
lst = ['qwe', 'rty']
あなたは簡単に行うことができます
a, b = lst
、およびlst[0]
に割り当てます。リストはスライスすることもできます:a
lst[1]
b
long_lst = range(1000)
a, b = long_lst[500:502]
実際に辞書を使用したい場合は、次のようにそのコンポーネントにアクセスできます。
>>> d = {'a': 'AAA', 'b': 'BBB'}
>>> d.keys()
['a', 'b']
>>> d.values()
['AAA', 'BBB']
>>> d.items()
[('a', 'AAA'), ('b', 'BBB')]
ただし、前述のように、この例でたまたま正しい順序になっている場合でも、辞書の順序に依存することはできません。辞書の順序は時間の経過とともに変化します。
いいえ; 辞書の索引付けは、通常、辞書のキーでは意味をなさないため、スライスをサポートしていません。
ただし、次のようなものを使用して、自分でロールすることができます
a, b = map(f().get, [1, 2])
または(@DSMに感謝)
a, b = operator.itemgetter(1, 2)(f())
これらは、の結果f()
が欠落している場合、1
または2
キーとしての場合、最初の結果がデフォルトで割り当てNone
になり、2番目の結果がレイズするという点でわずかに異なりますKeyError
。おそらく少し遅くなりますが、map(f().__getitem__, ...)
と同等である必要があります。itemgetter
はい、メソッドを使用してdict.values()
ください:
x,y = f().values()[0:2]