searching a value of a dict (each value is a list)

Seongsu Lee senux at senux.com
Mon Dec 10 04:50:44 EST 2007


On 12월10일, 오후12시18분, Adonis Vargas <adon... at REMOVETHISearthlink.net>
wrote:
> Seongsu Lee wrote:
> > Hi,
>
> > I have a dictionary with million keys. Each value in the
> > dictionary has a list with up to thousand integers.
> > Follow is a simple example with 5 keys.
>
> > dict = {1: [1, 2, 3, 4, 5],
> >    2: [10, 11, 12],
> >    900000: [100, 101, 102, 103, 104, 105],
> >    900001: [20, 21, 22],
> >    999999: [15, 16, 17, 18, 19]}
>
> > I want to find out the key value which has a specific
> > integer in the list of its value. For example, if I search
> > 104 in the list, 900000 must be returned.
>
> > How can I do this with Python? Ideas?
>
> You can try this:
>
> items = {1: [1, 2, 3, 4, 5],
>           2: [10, 11, 12],
>           900000: [100, 101, 102, 103, 104, 105],
>           900001: [20, 21, 22],
>           999999: [15, 16, 17, 18, 19]}
>
> def findItem(item, dictionary):
>      for key, value in dictionary.iteritems():
>          if item in value:
>              print key, value
>
> findItem(104, items)
>
> This will allow you to work with the existing dataset without needing to
> duplicate it. It will print all occurrances.

Hi,

Yes, it works. But I think it works in O(n * m), doesn't it?
(n is # of keys in the dictionary and m is # of items in the list.)
So, we need to create a reverse index. (a reverse dictionary) or
need something better at least, I think.

> Also, you should never use reserved words like 'dict' this creates
> confusion and can cause Python to misbehave since you are rebinding the
> name.

Yep. :)

> Hope this helps.
>
> Adonis Vargas- 따온 텍스트 숨기기 -
>
> - 따온 텍스트 보기 -



More information about the Python-list mailing list