[Python-Dev] Proposal: dict.with_values(iterable)
Victor Stinner
vstinner at redhat.com
Fri Apr 12 10:31:47 EDT 2019
Nice optimization! I have questions on the proposed API.
> with_values(self, iterable, /)
> Create a new dictionary with keys from this dict and values from iterable.
>
> When length of iterable is different from len(self), ValueError is raised.
> This method does not support dict subclass.
In short, mydict.with_values(values) behaves as
dict(zip(mydict.keys(), values)), but is more efficient?
The method rely on the fact that dict is preserving key insertion order, right?
Le ven. 12 avr. 2019 à 15:47, Inada Naoki <songofacandy at gmail.com> a écrit :
> This might be usable for:
>
> * csv.DictReader
> * namedtuple._asdict()
> * DB-API 2.0 implementations: (e.g. DictCursor of mysqlclient-python)
I guess that a new dict constructor taken keys and values like
dict.from_keys_and_values(keys, values) would work, but would not
benefit from the dict key-sharing optimization?
Would it be possible to implement the key-sharing optimization using a
dict.from_keys_and_values(mydict.keys(), values) method: detect that
keys are owned by a dict, and so create a new dict linked to the keys
dict? A dict view contains a reference to the iterated dict
(dictiterobject.di_dict).
I'm fine with dict.with_values() API, but I'm asking if it could be
written differently.
Victor
--
Night gathers, and now my watch begins. It shall not end until my death.
More information about the Python-Dev
mailing list