What about changing the order of lines in which `value` and `key` are made?
```python
key = self.keygetter(key, value)
value = self.valuegetter(value)
```

--
PS: I still think that it's better to get a `key` from **new** `value`.