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
  list in dicitonary element problem jacksfrustration 3 625 Oct-14-2023, 03:37 PM
Last Post: deanhystad
  Delete strings from a list to create a new only number list Dvdscot 8 1,466 May-01-2023, 09:06 PM
Last Post: deanhystad
  find random numbers that are = to the first 2 number of a list. Frankduc 23 3,012 Apr-05-2023, 07:36 PM
Last Post: Frankduc
  Find (each) element from a list in a file tester_V 3 1,155 Nov-15-2022, 08:40 PM
Last Post: tester_V
  Сheck if an element from a list is in another list that contains a namedtuple elnk 8 1,713 Oct-26-2022, 04:03 PM
Last Post: deanhystad
  Membership test for an element in a list that is a dict value for a particular key? Mark17 2 1,158 Jul-01-2022, 10:52 PM
Last Post: Pedroski55
  TypeError: float() argument must be a string or a number, not 'list' Anldra12 2 4,757 Jul-01-2022, 01:23 PM
Last Post: deanhystad
  How to find the second lowest element in the list? Anonymous 3 1,903 May-31-2022, 01:58 PM
Last Post: Larz60+
  check if element is in a list in a dictionary value ambrozote 4 1,879 May-11-2022, 06:05 PM
Last Post: deanhystad
  Split a number to list and list sum must be number sunny9495 5 2,196 Apr-28-2022, 09:32 AM
Last Post: Dexty

Forum Jump:

User Panel Messages

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