[Tutor] updating a dictionary
Alan Gauld
alan.gauld at btinternet.com
Thu Feb 19 23:56:51 CET 2015
On 19/02/15 21:19, Chris Stinemetz wrote:
> The dictionary format looks like:
>
> format = {'Cell': '','7':'','8':'','9':'','2':''}
>
> For each line read in I would simply like to check to see if a Cell
> key;value exists and if it does update the correct key==band(7,8,9,2)
> within the dictionary.
>
> If the Cell doesn't exist do the same thing as above only make sure to
> update the Cell key:value with it's value form the file so it can check to
> see if it exists later.
I'm not sure what the difference is here? If you update the dictionary
or add a new key it will automatically have that key going forward.
> There are duplicate Cell:values in the file so when
> there is a duplicate it will need to look at band to see what key:value to
> update.
I'm not sure what 'band' is? You have not mentioned it up until now.
> Below is what I have attempted thus far. I can provide sample data if
> needed.
I think a short same of your data would be useful, both input and output.
> import datetime
> import string
> import pprint
You don't use string. Do you really need it? It's quite rarely
used these days.
And you don't use pprint either. Do you plan on having a use
for it later?
> from datetime import datetime
>
> # Open a files for reading
> inFileOne = open('PRB_utilization.txt', "r")
You should get used to using the 'with' construct for file
handling, it's usually shorter and much more reliable.
> iDas = "DB"
> oDas = "D"
>
> suffix = (iDas,oDas)
suffix = ("DB","D")
would be shorter and more obvious, since you don't use the
single value variables anywhere in the code..
> dict = {'Cell': '','7':'','8':'','9':'','2':''}
Using dict as a name is a bad idea because it hides the
built in dict type conversion function.
> for line in inFileOne.readlines():
You don't need readlines() any more you can just
do:
for line in inFileOne:
> index = line.rstrip("\n").split("\t")
>
> cell = index[1]
>
> if cell.endswith(suffix, 14, 16) is False:
> eNb = cell[0:8]
> sector = cell[10:11]
> band = cell[9:10]
> dl_prb_utl = index[60]
> site = eNb + "_" + sector
I'll assume that's all OK since we can't see the data format.
> if site in dict:
> dict['Cell'] = site
> dict[band] = dl_prb_utl
> else:
> dict['Cell'] = site
> dict[band] = dl_prb_utl
Both 'if' and 'else' clauses do the same thing so there
is no point in doing a test. Just use:
dict['Cell'] = site
dict[band] = dl_prb_utl
> inFileOne.close();
You don't need this if you use the with... form.
Other than the minor tweaks I've suggested I'm not sure what your
problem is? I think we need to see the data to understand the issue.
--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.amazon.com/author/alan_gauld
Follow my photo-blog on Flickr at:
http://www.flickr.com/photos/alangauldphotos
More information about the Tutor
mailing list