On 3/31/2016 10:13 AM, Marko Rauhamaa wrote:

One could compose a table of correspondences:

with some corrections

       -------------------------------------------
       list (L)                    dict (D)
       -------------------------------------------
       L[key] = value              D[key] = value
       del L[key] (*)              del L[key]
       (*) reassigns all keys
       key >= 0 and key < len(L)   key in D

'-len(L) <= key < len(L)' or 'key in range(-len(L), len(L)'
Lists, tuples, and ranges have 2 keys for each value,
though that is not guaranteed for sequences in general.

key in D == key in D.keys()

       range(len(L))               iter(D)

         iter(range(Len(L))          == iter(D.keys())

       L.clear                     D.clear
       L.copy                      D.copy
       lambda key: L[key]          D.get

The purpose of D.get() is to supply a default instead of raising KeyError when key not in D. The lambda function above does not do that. Turning subscripting into a function is a side-effect of D.get. A generic get function:

def get(subscriptable, key, default=None):
    try:
        return subscriptable[key]
    except (IndexError, KeyError):
        return default

       lambda: enumerate(L)        D.items

As I pointed out a couple days ago, an enumerate iterator is quite different from a set-like dynamic view. An actual correspondence:

         enumerate(L)               iter(D.items())

Writing a set-like dynamic view of lists corresponding to D.values() or D.items() would be an interesting project.

       lambda: range(len(L))       D.keys

         iter(range(len(L))          iter(D.keys())
Already given above. Iterating indexes is now much rarer than iterating dict keys.

--
Terry Jan Reedy

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

Reply via email to