Ist es möglich, solche Dinge zu tun:

def f():
  d={}
  d[1]='qwe'
  d[2]='rty'
  return d

a,b=f()[1:2]

Nicht a,b=f()[1],f()[2] und nicht

t=f()
a,b=t[1],t[2]

Ich werde zusätzliche Leitungen nicht vermeiden und die Funktion nur einmal aufrufen.

0
scythargon 6 Okt. 2012 im 20:18

3 Antworten

Beste Antwort

Nein; Die Wörterbuchindizierung unterstützt kein Slicing, da dies in Wörterbuchschlüsseln normalerweise keinen Sinn ergibt.

Sie können es jedoch selbst mit so etwas rollen

a, b = map(f().get, [1, 2])

Oder (danke @DSM)

a, b = operator.itemgetter(1, 2)(f())

Diese unterscheiden sich geringfügig darin, dass, wenn das Ergebnis von f() 1 oder 2 als Schlüssel fehlt, der erste standardmäßig None zuweist und der zweite {{X4 }}. map(f().__getitem__, ...) sollte itemgetter entsprechen, wahrscheinlich jedoch etwas langsamer.

1
Dougal 6 Okt. 2012 im 16:32

Ja, verwenden Sie einfach die Methode dict.values():

x,y = f().values()[0:2]
1
Dmytro Sirenko 6 Okt. 2012 im 16:25

Mir ist unklar, was genau Sie tun möchten. Sie indizieren ein Wörterbuch nach Ganzzahlen. Ganzzahlen können problemlos als Schlüssel für ein Wörterbuch verwendet werden, aber es sieht so aus, als wäre eine Liste in Ihrem Fall sinnvoller. Ein wichtiger Unterschied zwischen Wörterbüchern und Listen besteht darin, dass Wörterbücher nicht geordnet sind. d[1] und d[2] stehen in Ihrem Beispiel nicht unbedingt an erster und zweiter Stelle. Wenn Sie also von der Reihenfolge abhängig sind, funktionieren Standardwörterbücher ohnehin nicht ({{ X2}} würde).

(Die Tatsache, dass Ihre Datenstruktur von einer Funktion f() zurückgegeben wird, spielt hier keine Rolle, daher werde ich sie zur besseren Lesbarkeit ignorieren.)

Wenn du hast

lst = ['qwe', 'rty']

Sie können einfach tun

a, b = lst

lst[0] a und lst[1] b zuweisen. Listen können auch in Scheiben geschnitten werden:

long_lst = range(1000)
a, b = long_lst[500:502]

Wenn Sie tatsächlich ein Wörterbuch verwenden möchten, können Sie wie folgt auf seine Komponenten zugreifen:

>>> d = {'a': 'AAA', 'b': 'BBB'}
>>> d.keys()
['a', 'b']
>>> d.values()
['AAA', 'BBB']
>>> d.items()
[('a', 'AAA'), ('b', 'BBB')]

Aber wie oben erwähnt, können Sie sich im Laufe der Zeit nicht auf die Reihenfolge eines Wörterbuchs verlassen, auch wenn sie in diesem Beispiel in der richtigen Reihenfolge vorliegen.

2
Lukas Graf 6 Okt. 2012 im 16:38