Vito De Tullio wrote:
Tim Roberts wrote:

bearophileh...@lycos.com wrote:
In Python 3 those lines become shorter:

for k, v in a.items():
{k: v+1 for k, v in a.items()}

This is nonsensical. It creates and discards a complete new dict for each item in the original dict. The reuse of names 'k' and 'v' in the comprehension just confuse.

That's a syntax I have not seen in the 2-to-3 difference docs, so I'm not
familiar with it.  How does that cause "a" to be updated?

It does not.

I think he would write

a = { 'a': 4, 'c': 6, 'b': 5 }
a = { k:v+1 for k, v in a.items() }
a
{'a': 5, 'c': 7, 'b': 6}

This *replaces* original dict a with a new dict rather than updating (its values) in place. This is less efficient. If there are other references to the original dict, the rebinding may or may not be correct.

I believe the in-place update was already given as:
for k,v in a.items():  a[k] = v+1 # or
for k in a.keys(): a[k] += 1


Terry Jan Reedy


--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to