[Tutor] dealing with nested list values in a dictionary

Kent Johnson kent37 at tds.net
Fri May 25 12:35:46 CEST 2007


kumar s wrote:
> Dear group,
> 
> unfortunately my previous post got tagged as
> 'homework' mail and got no responses. 
> 
> In short, I have a dictionary structure as depicted
> below. 
> 
> I want to go over every key and print the key,value
> pairs in a more sensible way. 
> 
> I have written a small piece of code. May I request
> tutors to go through it and comment if it is correct
> or prone to bugs. 
> 
> Thank you. 
> kum
> 
>>>> md = {(21597133, 21597325): [['NM_032457']], 
> (21399193, 21399334): [['NM_032456'], ['NM_002589']], 
> (21397395, 21399192): [['NM_032457'], ['NM_032456'],
> ['NM_002589']], 
> (21407733, 21408196): [['NM_002589']], 
> (21401577, 21402315): [['NM_032456']], 
> (21819453, 21820111): [['NM_032457']], 
> (21399335, 21401576): [['NM_032457'], ['NM_032456'],
> ['NM_002589']]}
> 
>>>> for item in md.keys():
> 	mlst = []
> 	for frnd in md[item]:
> 		for srnd in frnd:
> 			mlst.append(srnd)
> 	mystr = ','.join(mlst)
> 	print(('%d\t%d\t%s')%(item[0],item[1],mystr))

This is OK but it could be shorter. I usually use dict.items() when I 
need both the keys and values of a dictionary. The nested lists seem to 
always have one item in them so maybe you could pull that out directly 
instead of with a for loop. Then a list comprehension would make the 
code more concise. So I would write this more this way:

for key, value in md.items():
   mlst = [ frnd[0] for frnd in value ]
   mystr = ','.join(mlst)
   print(('%d\t%d\t%s')%(key[0],key[1],mystr))

This is not more correct, just more concise.

Also if you care about the order of the output you could easily sort it 
using
for key, value in sorted(md.items()):

Kent

> 
> 	
> 21597133	21597325	NM_032457
> 21399193	21399334	NM_032456,NM_002589
> 21397395	21399192	NM_032457,NM_032456,NM_002589
> 21407733	21408196	NM_002589
> 21401577	21402315	NM_032456
> 21819453	21820111	NM_032457
> 21399335	21401576	NM_032457,NM_032456,NM_002589
> 
> 
>       ____________________________________________________________________________________Fussy? Opinionated? Impossible to please? Perfect.  Join Yahoo!'s user panel and lay it on us. http://surveylink.yahoo.com/gmrs/yahoo_panel_invite.asp?a=7 
> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
> 



More information about the Tutor mailing list