building a dictionary dynamically

alex23 wuwei23 at gmail.com
Mon Feb 6 22:38:15 EST 2012


On Feb 5, 4:13 am, noydb <jenn.du... at gmail.com> wrote:
> How do you build a dictionary dynamically?
> >>> inDict = {}
> >>> for inFC in inFClist:
> >>>     print inFC
> >>>     inCount =  int(arcpy.GetCount_management(inFC).getOutput(0))
>
> where I want to make a dictionary like {inFC: inCount, inFC:
> inCount, ....}
>
> How do I build this???

The easiest way is to use the standard dictionary constructor. dict()
can accept a list of key/value pairs:

    >>> pairs = [('a',1), ('b',2), ('c',3)]
    >>> dict(pairs)
        {'a': 1, 'c': 3, 'b': 2}

And one way to build a list is with a list comprehension:

    >>> pairs = [(key, i+1) for i, key in enumerate(['a','b','c'])]
    >>> pairs
    [('a', 1), ('b', 2), ('c', 3)]

So you can combine the two, using a list comprehension to build the
list that is passed into dict():

    >>> dict([(key, i+1) for i, key in enumerate(['a','b','c'])])
    {'a': 1, 'c': 3, 'b': 2}

As a convenience, you don't need the square brackets:

    >>> dict((key, i+1) for i, key in enumerate(['a','b','c']))
    {'a': 1, 'c': 3, 'b': 2}

For your example, I'd go with something like this:

    getCount = lambda x:
int(arcpy.GetCount_management(x).getOutput(0))
    inDict = dict(
        (inFC, getCount(inFC)) for inFC in inFClist
    )

Hope this helps.



More information about the Python-list mailing list