Fwd: Re: Comparing Dictionaries

K

Kenneth Love

From: "Steven D'Aprano" <[email protected]>
Newsgroups: comp.lang.python
Subject: Re: Comparing Dictionaries
Date: Sat, 28 Jul 2007 10:21:14 +1000
To: (e-mail address removed)



I think you have made a mistake. ConfigParser as published certainly DOES
accept periods in section and option names. It just *works*.

The recipe I'm using is based upon ConfigParser and creates a dictionary
that is based on the contents of the INI file. The dictionary's key is
based on the section name and the key name from the INI file. The two
are concatenated with a separator.

In the original recipe, the separator is a period. To use your example
(deleted as an attempt at brevity), the dictionary would be:

{ "SECTION.FRED.option.wilma" : "45" }

As originally written, the section name is now "SECTION" when you write
the INI file back out. The key is "FRED.option.wilma".

Here is the original recipe:

http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/65334

My version replaces the period with a dollar sign giving:

{ "SECTION.FRED$option.wilma" : "45" }

I also removed the "import string" and put both the load() and save()
functions in a file with proper comments and the Python equivalent of
Javadoc comments.
Even if the existing ConfigParser doesn't do what you want, the right way
to fix the problem is not to recreate the entire module from scratch, but
to subclass it:
[snip]

In no way did I rewrite ConfigParser. I have a real job with time
pressures and I'm not so arrogant as to think I could whip something
up in an hour that would be anywhere close to correct.

I see that I wasn't as clear as I thought I was in my original post
as you are second person to think I was developing my own INI solution.

All I wanted to know was "How do I compare two dictionaries to see if
they are equal?". It turns out that this functionality is built-in
and it is my own stupid fault that my unit test was failing (modifying
working code and writing a unit test at the same time is a recipe for
failure).

Oh well. Next time I'll spend two hours trying to figure it out instead
of one before I post. :-\

--
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Kenneth Love | Oklahoma Tax Commission
DP Programmer/Analyst | Information Technology
(405) 522 - 5864 | http://www.tax.ok.gov/
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
 
S

Steven D'Aprano

The recipe I'm using is based upon ConfigParser and creates a dictionary
that is based on the contents of the INI file. The dictionary's key is
based on the section name and the key name from the INI file. The two
are concatenated with a separator.

In the original recipe, the separator is a period. To use your example
(deleted as an attempt at brevity), the dictionary would be:

{ "SECTION.FRED.option.wilma" : "45" }

Well, that's just broken.

"Flat is better than nested" is only true when things are actually better
flat rather than nested. The right way to build a dictionary from an INI
file is with nested dictionaries:

{"SECTION1": {"option1": 20, "option2": 30},
"SECTION2": {"option1", 2.0, "option2": 3.0}}

That treats each section as a single piece.

But if you absolutely insist on flattening the dictionary, the right way
is not to concatenate the section name and the option name into a single
string, but to use a tuple ("SECTION", "option").

[snip]
In no way did I rewrite ConfigParser. I have a real job with time
pressures and I'm not so arrogant as to think I could whip something
up in an hour that would be anywhere close to correct.

I see that I wasn't as clear as I thought I was in my original post
as you are second person to think I was developing my own INI solution.

Copying somebody else's code and modifying it is still recreating an
existing solution. Python has an INI file parser. What does it not do that
you have to recreate it by creating your own version?

Oh, ironically, the recipe you borrowed in fact uses the Python
ConfigParser to do all the heavy work. All it really does is flatten the
ConfigParser nested dictionary into a flat dictionary. I fail to see the
advantage.

All I wanted to know was "How do I compare two dictionaries to see if
they are equal?".

Yes, but I suspect what you _wanted_ to know and what you _needed_ to know
are different.
 

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,770
Messages
2,569,584
Members
45,077
Latest member
SangMoor21

Latest Threads

Top