How to manipulate list of dictionary

Bruno Desthuilliers bruno.42.desthuilliers at websiteburo.invalid
Tue Aug 26 05:25:03 EDT 2008


Simon Brunning a écrit :
> 2008/8/26 ajak_yahoo <arazak73 at yahoo.com.my>:
>> Need some help, I have a list of dictionary as below,
>>
>> table = [{"Part #":"Washer","Po #":"AE00128","qty":100},
>>          {"Part #":"Brake Pad","Po #":"AE00154","qty":150},
>>          {"Part #":"Mesh","Po #":"AE00025","qty":320},
>>          {"Part #":"Mouse","Po #":"AE00207","qty":120},
>>          {"Part #":"Insulator","Po #":"AE0013","qty":190}]
>>
>> How to manipulate the table?
>>
>> I need to search for the Po #, and display the result as below.
>>
>>
>> Part # : Mouse
>> Po #   : AE00207
>> Qty    : 120 pcs
> 
> Well, that's a really bad data structure for what you want to do, but
> you can do it with something like (untested):
> 
> wanted = 'AE00207'
> 
> for part in table:
>     if part['Po #'] == wanted:
>         print "Part #:\t%(Part #)s\nPo #:\t%(Po #)s\nQty #:\t%(qty)s" % part
> 

Which will not be very efficient if you happen to have lot of items in 
your list and or a lot of searches to do.


The next solution is to maintain an index, ie:

def make_index(table, key):
     index = {}
     for record in enumerate(table):
         index.setdefault(record[key], []).append(record)
     return index

po_index = make_index(table, "Po #")
results = po_index.get('AE00207', None)


But this won't scale up if you have millions of records. So the next 
next solution is to use a true database - either a RDBMS, or an embedded 
one like SQLite.




More information about the Python-list mailing list