[issue31992] Make iteration over dict_items yield namedtuples

2017-11-10 Thread R. David Murray

R. David Murray  added the comment:

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.

--
nosy: +r.david.murray
resolution:  -> rejected
stage:  -> resolved
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue31992] Make iteration over dict_items yield namedtuples

2017-11-10 Thread Richard Neumann

Richard Neumann  added the comment:

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())

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue31992] Make iteration over dict_items yield namedtuples

2017-11-09 Thread Eric V. Smith

Eric V. Smith  added the comment:

I cannot imagine this ever happening, for performance reasons.

You should write your own wrapper around items, if you want this behavior.

--
nosy: +eric.smith

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue31992] Make iteration over dict_items yield namedtuples

2017-11-09 Thread Serhiy Storchaka

Serhiy Storchaka  added the comment:

Oh, no! Tuples is one of the most charming features of Python. Use tuples, folk!

--
nosy: +rhettinger, serhiy.storchaka

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue31992] Make iteration over dict_items yield namedtuples

2017-11-09 Thread Richard Neumann

New submission from Richard Neumann :

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.

--
components: Library (Lib)
messages: 305970
nosy: Richard Neumann
priority: normal
severity: normal
status: open
title: Make iteration over dict_items yield namedtuples
type: enhancement
versions: Python 3.8

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com