Currently, iterating over dict_items will yield plain tuples, where the first item will be the key and the second item will be the respective value. This has some disadvantages when e.g. sorting dict items by value and key: def sort_by_value_len(dictionary): return sorted(dictionary.items(), key=lambda item: (len(item[1]), item[0])) I find this index accessing extremely unelegant and unnecessarily hard to read. If dict_items would instead yield namedtuples like DictItem = namedtuple('DictItem', ('key', 'value')) this would make constructs like def sort_by_value_len(dictionary): return sorted(dictionary.items(), key=lambda item: (len(item.value), item.key)) possible and increase code clarity a lot. Also, namedtuples mimic the behaviour of plain tuples regarding unpacking and index accessing, so that backward-compatipility should exist.
Maybe there is no need to sacrifice performance, if a new, optional keyword argument would be introduced to dict.items(): def items(self, named=False): if named: else: Currently I need to define a namedtuple everywhere I do this and starmap the dicts' items. It'd be nice to have this option built-in or a new collections class like: from collections import namedtuple from itertools import starmap DictItem = namedtuple('DictItem', ('key', 'value')) class NamedDict(dict): """Dictionary that yields named tuples on item iterations.""" def items(self): """Yields DictItem named tuples.""" return starmap(DictItem, super().items())
This is not something it is worth complicating the dict API or collections for. If you want the feature in your code, implement your subclass in your own utility library. If you disagree with this decision, please bring it up on the python-ideas mailing list for further analysis, but I'm guessing you won't get much traction.
History
Date
User
Action
Args
2022-04-11 14:58:54
admin
set
github: 76173
2017-11-10 13:28:26
r.david.murray
set
status: open -> closednosy: + r.david.murraymessages: + resolution: rejectedstage: resolved