2011/12/31 Nathan Schneider
On Sat, Dec 31, 2011 at 4:55 PM, Terry Reedy
wrote: On 12/31/2011 11:07 AM, julien tayon wrote:
The question is a dict the same as a vector or as a set ?
A dict is a mapping, which is to say, a functional set of key,value pairs. 'Functional' means that the keys are unique. This is a key property (pun intended). A vector can be regarded as a functional set of count,value pairs. Some languages use dicts for vectors. Even in Python, people use dicts for sparse arrays of various dimensions, with unspecified pairs assumed to have a 0 value. Yes, a potentialy indefinite sparse value vector on a base at least greater. For which the dimension is the path of keys to a value. And I lamely admitted these were orthogonal in my mind to one another. (therefore dicthing coupling problematics in the first time since I will think of matrix later)
That is the reason, I intend to back down on any argumentation on vectoriel meaning of dict without proper code to back up my claims :) .
It occurs to me that any argument for a vector interpretation of dicts, with element-wise operations, should apply equally well to lists and tuples, which are perhaps even more natural as representations for vectors. But of course, the + operator for sequences is interpreted as concatenation, not element-wise addition; it would be strange if the reverse were true for dicts.
I do admit I came to the fact you are right. And, I think that if two keys were equals but not the value it should raise a collision exception. I could provide a consistent "set addition" for dict as an amend for making so much noise :) I would also provide sub. I see a way to provide a dynamic dict to sets translator that would be quite weiredl.
The necessary resolution of key conflicts is what makes "+" feel less natural to me for dicts than it does for sequences, where the order of the operands is transparently reflected in the output. For dicts, in contrast, we are talking about a "lossy" union/combination where what is lost depends on the order of the operands—this is less transparent in the output. However it is spelled, though, I would be thrilled if such an operation were built in. :)
I can write my module for this. :) (I need to document myself on magic methods) Well, if dict are vectors I must define : - matrix (projection of vectors in an another base) - distance (cosine similarity) I will therefore be able to define the notion of proximity once done that will tell if something is almost another thing a word counter of a text should be close to the word counters of the keyword it triggers. PS I did not quite catch the functionnal thingy. Cheers -- jul