Gleicher Value, neuer Key; alten Key löschen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
__marcus__
User
Beiträge: 92
Registriert: Mittwoch 10. September 2008, 22:10
Wohnort: Hamburg

Code: Alles auswählen

q = {0: 'foo'}
q[1] = q[0]
del(q[0])
Ist es möglich einem Value einen neuen Key zuzuweisen oder geht das nur genau so?
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Das dürfte nur so gehen. Falls Du aber nur Keys ändern willst, solltest Du Keys und Values tauschen.
MfG
HWK
Qubit
User
Beiträge: 128
Registriert: Dienstag 7. Oktober 2008, 09:07

__marcus__ hat geschrieben:

Code: Alles auswählen

q = {0: 'foo'}
q[1] = q[0]
del(q[0])
Ist es möglich einem Value einen neuen Key zuzuweisen oder geht das nur genau so?

Code: Alles auswählen

q.update({1:q.pop(0)})
__marcus__
User
Beiträge: 92
Registriert: Mittwoch 10. September 2008, 22:10
Wohnort: Hamburg

Qubit hat geschrieben:

Code: Alles auswählen

q.update({1:q.pop(0)})
Ist das nicht nur ein anderer Umweg zum selben Ziel?
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

So geht es natürlich auch:

Code: Alles auswählen

q[0] = q.pop(1)
Ist aber vom Prinzip nichts anderes als die erstgenannte Lösung, nämlich einen Eintrag löschen und einen neuen erzeugen.

Edit: zu spät
barfoos
User
Beiträge: 25
Registriert: Dienstag 29. Juli 2008, 09:46

Ich hab auf http://docs.python.org/c-api/dict.html folgendes gefunden:

The dictionary p should not be mutated during iteration. It is safe (since Python 2.1) to modify the values of the keys as you iterate over the dictionary, but only so long as the set of keys does not change. For example:

Code: Alles auswählen

PyObject *key, *value;
Py_ssize_t pos = 0;

while (PyDict_Next(self->dict, &pos, &key, &value)) {
    int i = PyInt_AS_LONG(value) + 1;
    PyObject *o = PyInt_FromLong(i);
    if (o == NULL)
        return -1;
    if (PyDict_SetItem(self->dict, key, o) < 0) {
        Py_DECREF(o);
        return -1;
    }
    Py_DECREF(o);
}
Hilft das evtl. weiter? Ich weiß nicht, was da genau gemacht wird, aber zumindest steht da, dass man den Wert eines keys ändern darf.

gruß
barfoos
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Das Beispiel scheint lediglich den value eines key-value-Paares zu ändern. Der Wert des keys wird nicht geändert. values ist hier etwas doppeldeutig.
MfG
HWK
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

HWK hat geschrieben:Edit: zu spät
Ist dafür aber die schönste Lösung :)
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Antworten