Python Forum
How to list number of times element is in defaultdict and delete it
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How to list number of times element is in defaultdict and delete it
#1
Goal:
if I see a certain value (example below is "0/1") listed more than 2 or more times I want:
1) Remove all respective items from the defaultdict value list.

I tried the example below from the documentation at python.org. No the example on the bottom would work for 'int'. Since this is a list, I am not sure how to proceed. Help is appreciated.

 
>>>
>>> l = defaultdict(list)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'defaultdict' is not defined
>>> from collections import defaultdict
>>> l = defaultdict(list)
>>> mylist=["0/1"]
>>> l['FAIL'].append(mylist)
>>> l
defaultdict(<class 'list'>, {'FAIL': [['0/1']]})
>>> mylist=["0/1"]
>>> l['FAIL'].append(mylist)
>>> l
defaultdict(<class 'list'>, {'FAIL': [['0/1'], ['0/1']]})
>>> mylist=["0/2"]
>>> l['FAIL'].append(mylist)
>>> l
defaultdict(<class 'list'>, {'FAIL': [['0/1'], ['0/1'], ['0/2']]})
>>> l.count("0/1")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>

>>> for k in l:
...     l[k] += 1
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
TypeError: 'int' object is not iterable   #since this is a list, is not working. Any ideas?
>>>
>>>
Reply
#2
which example at python.org?
l = defaultdict(list)
is not going to work, so I think you copied incorrectly
Reply
#3
Here. I am getting an error when I try.
https://docs.python.org/2/library/collec...efaultdict

Setting the default_factory to int makes the defaultdict useful for counting (like a bag or multiset in other languages):

>>> s = 'mississippi'
>>> d = defaultdict(int)
>>> for k in s:
... d[k] += 1
...
>>> d.items()
[('i', 4), ('p', 2), ('s', 4), ('m', 1)]
Reply
#4
First of all - which Python version you are using? Python 3 is strongly recommended as support for Python 2 will end this year.

If you are using Python 3 then refer to correct documentation: defaultdict

Your code is not same as in documentation, therefore you dont 'follow' it. But your problem is:

In [1]: from collections import defaultdict                                                                                                                             

In [2]: l = defaultdict(list)                                                                                                                                           

In [3]: mylist=["0/1"]                                                                                                                                                  

In [4]: l['FAIL'].append(mylist)                                                                                                                                        

In [5]: l                                                                                                                                                               
Out[5]: defaultdict(list, {'FAIL': [['0/1']]})

In [6]: l['FAIL'].append(mylist)                                                                                                                                        

In [7]: l                                                                                                                                                               
Out[7]: defaultdict(list, {'FAIL': [['0/1'], ['0/1']]})

In [8]: l['FAIL'].append(["0/2"])                                                                                                                                       

In [9]: l                                                                                                                                                               
Out[9]: defaultdict(list, {'FAIL': [['0/1'], ['0/1'], ['0/2']]})

In [10]: l['FAIL'].count('0/1')                                                                                                                                           
Out[10]: 0                           # values are lists therefore count is zero

In [11]: l['FAIL'].count(['0/1'])                                                                                                                                        
Out[11]: 2                           # counting lists gives correct answer
Values are under key 'FAIL' and they are not strings but lists. So, in order to count you must give key and then count lists, not strings.
I'm not 'in'-sane. Indeed, I am so far 'out' of sane that you appear a tiny blip on the distant coast of sanity. Bucky Katt, Get Fuzzy

Da Bishop: There's a dead bishop on the landing. I don't know who keeps bringing them in here. ....but society is to blame.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  sorting a list of lists by an element leapcfm 3 168 Sep-10-2021, 03:33 PM
Last Post: leapcfm
  Convert each element of a list to a string for processing tester_V 6 759 Jun-16-2021, 02:11 AM
Last Post: tester_V
  Delete list while iterating shantanu97 1 375 Jun-06-2021, 11:59 AM
Last Post: Yoriz
  I cannot delete and the elements from the list quest 4 786 May-11-2021, 12:01 PM
Last Post: perfringo
  Sume Every 10 element in the list and Divided of Sum quest_ 7 840 Nov-27-2020, 10:58 AM
Last Post: perfringo
  Counting Element in Multidimensional List quest_ 1 586 Nov-25-2020, 10:00 PM
Last Post: quest_
  Adding List Element if Second part of the List Elements are the Same quest_ 3 731 Nov-25-2020, 04:33 PM
Last Post: bowlofred
  Removing element from list squall 6 967 Nov-22-2020, 09:34 PM
Last Post: jefsummers
  2d Array adds last element to entire list waiteup 2 567 Nov-19-2020, 08:25 PM
Last Post: bowlofred
  How to get index of minimum element between 3 & 8 in list Mekala 2 861 Nov-10-2020, 12:56 PM
Last Post: DeaD_EyE

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020