Question

I am trying to implement the Apriori algorithm... http://codeding.com/articles/apriori-algorithm in Python.

The highest level data structuring goes something like this:

frequentItemSets[ k-level : itemSetDictionary]
                            |
                            |__
                               itemSetDictionary[ listOfItems : supportValueOfItems]
                                                  |
                                                  |__
                                                     list of integers, sorted lexicographically

I need to keep track of an arbitrary number of sets, the cardinality (k-level) of those sets, and a value that I calculate for each of those sets. I thought that using a list for all of the sets would be a good idea as they maintain order and are iterable. I tried to use lists as the keys within the itemSetDictionary, as you can see above, but now I see that iterable data structures are not allowed to be keys wihtin Python dictionaries.

I am trying to figure out the quickest way to fix this issue. I know that I can just create some classes so that the keys are now objects, and not iterable data structures, but I feel like that would take a lot of time for me to change.

Any ideas?

Was it helpful?

Solution

Dictionary keys must be hashable, which usable requires them to be immutable. Whether they are iterable is immaterial.

In this particular case, you probably want to use frozensets as keys.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top