[Tutor] how to understand unhashable type: 'list'
Christian Witts
cwitts at compuscan.co.za
Thu Nov 17 11:39:04 CET 2011
On 2011/11/17 12:26 PM, lina wrote:
> On Thu, Nov 17, 2011 at 6:09 PM, Christian Witts<cwitts at compuscan.co.za> wrote:
>> On 2011/11/17 11:59 AM, lina wrote:
>>
>> list1
>> [['61', '34', '61', '34'], ['61', '35', '61', '70', '61'], ['61',
>> '70', '61', '34'], ['34', '58', '34', '58']]
>>
>> weight={}
>> weight{list1[0]}=1
>>
>> SyntaxError: invalid syntax
>>
>> weight[list1[0]]=1
>>
>> Traceback (most recent call last):
>> File "<pyshell#292>", line 1, in<module>
>> weight[list1[0]]=1
>> TypeError: unhashable type: 'list'
>>
>> I wonder how to count the occurence of the list of lists.
>>
>> Thanks, ^_^
>> _______________________________________________
>> Tutor maillist - Tutor at python.org
>> To unsubscribe or change subscription options:
>> http://mail.python.org/mailman/listinfo/tutor
>>
>>
>> sum(1 if type(elem) == list else 0 for elem in list1) not work for you if
>> all you want to do is count how many lists you have in your main list ?
> not count how many sublists in the main list.
>
> wanna count the occurence of the sublists,
>
> I mean, something like
>
>>>> dictionary[list1[1]]=occurence
> Traceback (most recent call last):
> File "<pyshell#298>", line 1, in<module>
> dictionary[list1[1]]=1
> TypeError: unhashable type: 'list'
>>>>> dictionary[list1[1]]=1
> Traceback (most recent call last):
> File "<pyshell#298>", line 1, in<module>
> dictionary[list1[1]]=1
> TypeError: unhashable type: 'list'
>
For that you'll need to convert your list to a hash-able type if you
want to use dictionaries for your store, easiest would probably to use
the string representation for it so you could do
>>> list1 = [['61', '34', '61', '34'], ['61', '35', '61', '70', '61'],
['61', '70', '61', '34'], ['34', '58', '34', '58']]
>>> weight = {}
>>> for elem in list1:
... if elem.__repr__() in weight:
... weight[elem.__repr__()] += 1
... else:
... weight[elem.__repr__()] = 1
...
>>> weight
{"['34', '58', '34', '58']": 1, "['61', '70', '61', '34']": 1, "['61',
'34', '61
', '34']": 1, "['61', '35', '61', '70', '61']": 1}
or
>>> from collections import defaultdict
>>> list1 = [['61', '34', '61', '34'], ['61', '35', '61', '70', '61'],
['61', '7
0', '61', '34'], ['34', '58', '34', '58']]
>>> weight = defaultdict(int)
>>> for elem in list1:
... weight[elem.__repr__()] += 1
...
>>> weight
defaultdict(<type 'int'>, {"['34', '58', '34', '58']": 1, "['61', '70',
'61', '34']": 1, "['61', '34', '61', '34']": 1, "['61', '35', '61',
'70', '61']": 1})
Hope that helps.
--
Christian Witts
Python Developer
//
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20111117/0ffa7a95/attachment.html>
More information about the Tutor
mailing list