[Tutor] need advice about a dictionary ({})

Peter Otten __peter__ at web.de
Thu Sep 8 13:43:34 CEST 2011

Richard D. Moores wrote:

> I've succeeded in writing a dictionary ({}) that I can use as a small
> personal phone book. The dictionary (very shortened and simplified)
> looks like this in the script;
> p = {}
> p['bp1'] = 'xxx'
> p['bp2'] = 'ooo'
> p['ch'] = 'zzz'
> p['me'] = 'aaa'
> p['mg'] = 'vvv'
> p['pu1'] = 'bbb'
> p['pu2'] = 'ccc'
> p['pw'] = 'kkk'
> I have a function that enables the user to enter 'bp', for example,
> and return both 'xxx' and 'ooo'.
> (The keys are initials; I've disguised the values, each of which of
> course are   name, home number, mobile number, speed dial number,
> etc.)
> But I'd like to put the lines of the dictionary in a text file so that
> I can add key/value items to it by writing to it with another script.
> I think I can do that, but I need some hints about how to get  the
> script to access the text file in a way that lets the user look up a
> phone number. I'm thinking that the script needs to recreate the
> dictionary each time it's called, but I don't know how to do that.

Start with a simple file format. If you don't allow "=" in the key and "\n" 
in either key or value 


should do. I suppose you know how to read a file one line at a time? Before 
you add the line into the dictionary you have to separate key and value 
(str.partition() may help with that) and remove the trailing newline from 
the value. If you need more flexibility look into the json module. This 
makes reading and writing the file even easier, and while the format is a 
bit more complex than key=value

>>> print json.dumps(p, indent=2)
  "me": "aaa",
  "mg": "vvv",
  "ch": "zzz",
  "pw": "kkk",
  "bp1": "xxx",
  "bp2": "ooo",
  "pu1": "bbb",
  "pu2": "ccc"

it can still be edited by a human.

More information about the Tutor mailing list