how to find position of dictionary values

L

lee

hi,
i have a dictionary as follows :
kev : {'phno': ['dgsd', 'gsdg', 'dfsdf', 'g'], 'email': ['dg',
'sgsd', 'sdfsdf', 'gdf'], 'name': ['ds', 'dsg', 'dsfds', 'fgdf'],
'address': ['sdg', 'dsgsdg', 'sdf', 'dfg']}

if user is enters the 3rd item of key phno, ie "dfsdf" in my dict,
how can i find it is the third item in the internal list of phno of
that dictionary? thanks you.
 
A

Alexandru Palade

lookfor = 'dfsdf'
for item, value in kev.items():
if lookfor in value:
print item
print value.index(lookfor)
break # assuming you only want one result


You can also skip the 'if' verification in which case you need to catch
ValueError exception in case there is no such entry in the current list.

Hope it helps.
 
L

lee

lookfor = 'dfsdf'
for item, value in kev.items():
if lookfor in value:
print item
print value.index(lookfor)
break # assuming you only want one result

You can also skip the 'if' verification in which case you need to catch
ValueError exception in case there is no such entry in the current list.

Hope it helps.
hi,
i have a dictionary as follows :
kev : {'phno': ['dgsd', 'gsdg', 'dfsdf', 'g'], 'email': ['dg',
'sgsd', 'sdfsdf', 'gdf'], 'name': ['ds', 'dsg', 'dsfds', 'fgdf'],
'address': ['sdg', 'dsgsdg', 'sdf', 'dfg']}
if user is enters the 3rd item of key phno, ie "dfsdf" in my dict,
how can i find it is the third item in the internal list of phno of
that dictionary? thanks you.

hi, thank u your solution is exactly wat i wanted :)
 
B

Bruno Desthuilliers

lee a écrit :
hi,
i have a dictionary as follows :
kev : {'phno': ['dgsd', 'gsdg', 'dfsdf', 'g'], 'email': ['dg',
'sgsd', 'sdfsdf', 'gdf'], 'name': ['ds', 'dsg', 'dsfds', 'fgdf'],
'address': ['sdg', 'dsgsdg', 'sdf', 'dfg']}

if user is enters the 3rd item of key phno,
ie "dfsdf" in my dict,
how can i find it is the third item in the internal list of phno of
that dictionary?

It's quite simple (hint : read the FineManual(tm) for dict.items() and
list.index()), but 1/totally inefficient and 2/not garanteed to yield a
single value (what if 'dfsdf' happens to be also the 4th item of the
list bound to key 'address' ?).

May I suggest you rethink your data structure instead ? What you have
here is obviously a collection of 'phno/email/name/address'records.
These records shouldn't be split across different objects. Assuming
'phno' is a unique identifier for each record, a better data structure
would be:

records = {
'dgsd' : {'email': 'dg', 'name' : 'ds', 'address' : 'sdg'},
'gsdg' : {'email': 'sgsd', 'name':'ds', 'address' : 'dsgsdg'},
# etc
}

This way, the lookup is as simple and efficient as possible.


My 2 cents....
 
L

lee

lee a écrit :
hi,
i have a dictionary as follows :
kev : {'phno': ['dgsd', 'gsdg', 'dfsdf', 'g'], 'email': ['dg',
'sgsd', 'sdfsdf', 'gdf'], 'name': ['ds', 'dsg', 'dsfds', 'fgdf'],
'address': ['sdg', 'dsgsdg', 'sdf', 'dfg']}
if user is enters the 3rd item of key phno,
ie "dfsdf" in my dict,
how can i find it is the third item in the internal list of phno of
that dictionary?

It's quite simple (hint : read the FineManual(tm) for dict.items() and
list.index()), but 1/totally inefficient and 2/not garanteed to yield a
single value (what if 'dfsdf' happens to be also the 4th item of the
list bound to key 'address' ?).

May I suggest you rethink your data structure instead ? What you have
here is obviously a collection of 'phno/email/name/address'records.
These records shouldn't be split across different objects. Assuming
'phno' is a unique identifier for each record, a better data structure
would be:

records = {
'dgsd' : {'email': 'dg', 'name' : 'ds', 'address' : 'sdg'},
'gsdg' : {'email': 'sgsd', 'name':'ds', 'address' : 'dsgsdg'},
# etc

}

This way, the lookup is as simple and efficient as possible.

My 2 cents....

hi,
i agree with u, my data strusture is not efficient. but all the
records,viz...name,phno, email,address are all generated at runtime ,
when the user enters them. so how can i design my datastructure in
that case?
 
L

lee

lee a écrit :
hi,
i have a dictionary as follows :
kev : {'phno': ['dgsd', 'gsdg', 'dfsdf', 'g'], 'email': ['dg',
'sgsd', 'sdfsdf', 'gdf'], 'name': ['ds', 'dsg', 'dsfds', 'fgdf'],
'address': ['sdg', 'dsgsdg', 'sdf', 'dfg']}
if user is enters the 3rd item of key phno,
ie "dfsdf" in my dict,
how can i find it is the third item in the internal list of phno of
that dictionary?

It's quite simple (hint : read the FineManual(tm) for dict.items() and
list.index()), but 1/totally inefficient and 2/not garanteed to yield a
single value (what if 'dfsdf' happens to be also the 4th item of the
list bound to key 'address' ?).

May I suggest you rethink your data structure instead ? What you have
here is obviously a collection of 'phno/email/name/address'records.
These records shouldn't be split across different objects. Assuming
'phno' is a unique identifier for each record, a better data structure
would be:

records = {
'dgsd' : {'email': 'dg', 'name' : 'ds', 'address' : 'sdg'},
'gsdg' : {'email': 'sgsd', 'name':'ds', 'address' : 'dsgsdg'},
# etc

}

This way, the lookup is as simple and efficient as possible.

My 2 cents....

hi,
i agree with u, my data strusture is not efficient. but all the
records,viz...name,phno, email,address are all generated at runtime ,
when the user enters them. so how can i design my datastructure in
that case?
 
L

lee

lee a écrit :
hi,
i have a dictionary as follows :
kev : {'phno': ['dgsd', 'gsdg', 'dfsdf', 'g'], 'email': ['dg',
'sgsd', 'sdfsdf', 'gdf'], 'name': ['ds', 'dsg', 'dsfds', 'fgdf'],
'address': ['sdg', 'dsgsdg', 'sdf', 'dfg']}
if user is enters the 3rd item of key phno,
ie "dfsdf" in my dict,
how can i find it is the third item in the internal list of phno of
that dictionary?

It's quite simple (hint : read the FineManual(tm) for dict.items() and
list.index()), but 1/totally inefficient and 2/not garanteed to yield a
single value (what if 'dfsdf' happens to be also the 4th item of the
list bound to key 'address' ?).

May I suggest you rethink your data structure instead ? What you have
here is obviously a collection of 'phno/email/name/address'records.
These records shouldn't be split across different objects. Assuming
'phno' is a unique identifier for each record, a better data structure
would be:

records = {
'dgsd' : {'email': 'dg', 'name' : 'ds', 'address' : 'sdg'},
'gsdg' : {'email': 'sgsd', 'name':'ds', 'address' : 'dsgsdg'},
# etc

}

This way, the lookup is as simple and efficient as possible.

My 2 cents....

hi,
i agree with u, my data strusture is not efficient. but all the
records,viz...name,phno, email,address are all generated at runtime ,
when the user enters them. so how can i design my datastructure in
that case?
 
L

lee

lee a écrit :
hi,
i have a dictionary as follows :
kev : {'phno': ['dgsd', 'gsdg', 'dfsdf', 'g'], 'email': ['dg',
'sgsd', 'sdfsdf', 'gdf'], 'name': ['ds', 'dsg', 'dsfds', 'fgdf'],
'address': ['sdg', 'dsgsdg', 'sdf', 'dfg']}
if user is enters the 3rd item of key phno,
ie "dfsdf" in my dict,
how can i find it is the third item in the internal list of phno of
that dictionary?

It's quite simple (hint : read the FineManual(tm) for dict.items() and
list.index()), but 1/totally inefficient and 2/not garanteed to yield a
single value (what if 'dfsdf' happens to be also the 4th item of the
list bound to key 'address' ?).

May I suggest you rethink your data structure instead ? What you have
here is obviously a collection of 'phno/email/name/address'records.
These records shouldn't be split across different objects. Assuming
'phno' is a unique identifier for each record, a better data structure
would be:

records = {
'dgsd' : {'email': 'dg', 'name' : 'ds', 'address' : 'sdg'},
'gsdg' : {'email': 'sgsd', 'name':'ds', 'address' : 'dsgsdg'},
# etc

}

This way, the lookup is as simple and efficient as possible.

My 2 cents....

hi,
i agree with u, my data strusture is not efficient. but all the
records,viz...name,phno, email,address are all generated at runtime ,
when the user enters them. so how can i design my datastructure in
that case?
 
D

Diez B. Roggisch

lee said:
lee a écrit :
hi,
i have a dictionary as follows :
kev : {'phno': ['dgsd', 'gsdg', 'dfsdf', 'g'], 'email': ['dg',
'sgsd', 'sdfsdf', 'gdf'], 'name': ['ds', 'dsg', 'dsfds', 'fgdf'],
'address': ['sdg', 'dsgsdg', 'sdf', 'dfg']}
if user is enters the 3rd item of key phno,
ie "dfsdf" in my dict,
how can i find it is the third item in the internal list of phno of
that dictionary?

It's quite simple (hint : read the FineManual(tm) for dict.items() and
list.index()), but 1/totally inefficient and 2/not garanteed to yield a
single value (what if 'dfsdf' happens to be also the 4th item of the
list bound to key 'address' ?).

May I suggest you rethink your data structure instead ? What you have
here is obviously a collection of 'phno/email/name/address'records.
These records shouldn't be split across different objects. Assuming
'phno' is a unique identifier for each record, a better data structure
would be:

records = {
'dgsd' : {'email': 'dg', 'name' : 'ds', 'address' : 'sdg'},
'gsdg' : {'email': 'sgsd', 'name':'ds', 'address' : 'dsgsdg'},
# etc

}

This way, the lookup is as simple and efficient as possible.

My 2 cents....

hi,
i agree with u, my data strusture is not efficient. but all the
records,viz...name,phno, email,address are all generated at runtime ,
when the user enters them. so how can i design my datastructure in
that case?

Are "u" short on keystrokes? You are not textmessaging here...

Regarding the actual question: there is no difference in building your or
the other structure. It's only a question of which key you use first.
Instead of first looking up the type of the record ("phno" or some such),
do that with the name of the user. If no record exists, create one. Then
populate the record with the user's values. Like this:

user = "dsdf"
phonenumber = "123"

record = records.setdefault(user, {})
record["phno"] = phonenumber

Diez
 
L

lee

lee said:
lee a écrit :
hi,
i have a dictionary as follows :
kev : {'phno': ['dgsd', 'gsdg', 'dfsdf', 'g'], 'email': ['dg',
'sgsd', 'sdfsdf', 'gdf'], 'name': ['ds', 'dsg', 'dsfds', 'fgdf'],
'address': ['sdg', 'dsgsdg', 'sdf', 'dfg']}
if user is enters the 3rd item of key phno,
ie "dfsdf" in my dict,
how can i find it is the third item in the internal list of phno of
that dictionary?
It's quite simple (hint : read the FineManual(tm) for dict.items() and
list.index()), but 1/totally inefficient and 2/not garanteed to yield a
single value (what if 'dfsdf' happens to be also the 4th item of the
list bound to key 'address' ?).
May I suggest you rethink your data structure instead ? What you have
here is obviously a collection of 'phno/email/name/address'records.
These records shouldn't be split across different objects. Assuming
'phno' is a unique identifier for each record, a better data structure
would be:
records = {
'dgsd' : {'email': 'dg', 'name' : 'ds', 'address' : 'sdg'},
'gsdg' : {'email': 'sgsd', 'name':'ds', 'address' : 'dsgsdg'},
# etc
}
This way, the lookup is as simple and efficient as possible.
My 2 cents....
hi,
i agree with u, my data strusture is not efficient. but all the
records,viz...name,phno, email,address are all generated at runtime ,
when the user enters them. so how can i design my datastructure in
that case?

Are "u" short on keystrokes? You are not textmessaging here...

Regarding the actual question: there is no difference in building your or
the other structure. It's only a question of which key you use first.
Instead of first looking up the type of the record ("phno" or some such),
do that with the name of the user. If no record exists, create one. Then
populate the record with the user's values. Like this:

user = "dsdf"
phonenumber = "123"

record = records.setdefault(user, {})
record["phno"] = phonenumber

Diez

i am soory for that keystrokes. can anyone tell me how can i change
the value of key.
suppose i have a dictionary

kev = {'kabir': ['(e-mail address removed)', '1234', 'missuri'], 'shri':
['(e-mail address removed)', '23423', 'india'], 'marsa': ['(e-mail address removed)',
'2345', 'brazil'], 'sandeep': ['(e-mail address removed)', '007',
'canada']}


how can i change the key to something like 'sabir' and how can i
change the values of kabir?
 
L

lee

i am soory for that keystrokes. can anyone tell me how can i change
the value of key.
suppose i have a dictionary
kev = {'kabir': ['(e-mail address removed)', '1234', 'missuri'], 'shri':
['(e-mail address removed)', '23423', 'india'], 'marsa': ['(e-mail address removed)',
'2345', 'brazil'], 'sandeep': ['(e-mail address removed)', '007',
'canada']}
how can i change the key to something like 'sabir' and

kev['sabir'] = kev['kabir']
del kev['kabir']
how can i
change the values of kabir?

kev['sabir'][0] = '(e-mail address removed)'

*untested*

thanks wojtek, it worked :)
 
B

Bruno Desthuilliers

lee a écrit :
> i am soory for that keystrokes

Is your cap key broken ?-)

</ot>

(snip)
. can anyone tell me how can i change
the value of key.
suppose i have a dictionary

kev = {'kabir': ['(e-mail address removed)', '1234', 'missuri'], 'shri':
['(e-mail address removed)', '23423', 'india'], 'marsa': ['(e-mail address removed)',
'2345', 'brazil'], 'sandeep': ['(e-mail address removed)', '007',
'canada']}


how can i change the key to something like 'sabir' and how can i
change the values of kabir?

I don't mean to be harsh, but did you read the FineManual(tm) ? All this
is very basic (no pun) stuff, mostly documented, and easy to try out
using the interactive interpreter. This ng is very newbie-friendly, but
this doesn't mean you can hope to get by without doing the minimal
effort of going thru the tutorial and trying a couple things by yourself
before asking.

Hope you'll understand the above remark intends to be an helpful advice...
 
T

Terry Reedy

Alexandru said:
> lookfor = 'dfsdf'
> for item, value in kev.items():
> if lookfor in value:
> print item
> print value.index(lookfor)
> break # assuming you only want one result

slight variation:

lookfor = 'dfsdf'
for item, value in kev.items():
for i, val in enumerate(value):
if val == lookfor:
print item, i
break # assuming you only want one result
else:
print lookfor, 'not found'

This is what for-else is meant for.

If you want 0 to many lookfor occurences,

lookfor = 'dfsdf'
hits = []
for item, value in kev.items():
for i, val in enumerate(value):
if val == lookfor:
hits.append((item, i))

print hits

One-liner fanatics would, of course, rewrite this as

hits = [(item, i) for item, value in kev.items() for i, val in
enumerate(value) if val == lookfor]

Terry Jan Reedy



tjr
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,042
Latest member
icassiem

Latest Threads

Top