python: removing duplicates in multidimensional lists
This commit is contained in:
		
							parent
							
								
									581598ae33
								
							
						
					
					
						commit
						e961306a25
					
				
					 1 changed files with 46 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -123,4 +123,50 @@ filtered_ages = list(filter(lambda person: person[1] > 18, name_age))
 | 
			
		|||
 | 
			
		||||
### Remove duplicate entries from multidimensional list
 | 
			
		||||
 | 
			
		||||
If we are just working with a normal list, a quick way to remove duplicates is just:
 | 
			
		||||
 | 
			
		||||
```py
 | 
			
		||||
our_list = [9, 9, 3, 2]
 | 
			
		||||
unique = list(set(our_list))
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This won't work with a list of lists because lists are not hashable.
 | 
			
		||||
 | 
			
		||||
There are different approaches. Let's say we have the following multidimensional list:
 | 
			
		||||
 | 
			
		||||
```py
 | 
			
		||||
dummy_data = [
 | 
			
		||||
    ["1689023491", "Article Three", "Lorem ipsum...", "https://example.com"],
 | 
			
		||||
    ["1688582410", "Article One", "Lorem ipsum...", "https://example.com"],
 | 
			
		||||
    ["1688647447", "Article Two", "Lorem ipsum...", "https://example.com"],
 | 
			
		||||
    ["1689023491", "Article Three", "Lorem ipsum...", "https://example.com"],
 | 
			
		||||
]
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Here is one method:
 | 
			
		||||
 | 
			
		||||
```py
 | 
			
		||||
unique = []
 | 
			
		||||
seen = set()
 | 
			
		||||
for element in dummy_data:
 | 
			
		||||
    element_to_check = element[0]
 | 
			
		||||
    if element_to_check not in seen:
 | 
			
		||||
        unique.append(element)
 | 
			
		||||
        seen.add(element_to_check)
 | 
			
		||||
print(unique)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
We designate a unique property in the inner lists and then store a unique record of each. If the seen set doesn't have the incoming element, we add it to the unique array.
 | 
			
		||||
 | 
			
		||||
It's more efficient to use a dictionary because it allows us to do this in 0(1) time rather than 0(n):
 | 
			
		||||
 | 
			
		||||
```py
 | 
			
		||||
unique_dict = {x[0]: x for x in dummy_data}
 | 
			
		||||
unique_data = list(unique_dict.values())
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This approach leverages the fact that a dictionary cannot have duplicate keys: if you try to insert an element with a key that already exists, the new value will simply overwrite the old value for that key.
 | 
			
		||||
 | 
			
		||||
Accordingly, we create a dictionary which uses the unique key in each list as the key of each dictionary entry via [dictionary comprehension](/Programming_Languages/Python/Syntax/List_comprehension_etc.md#dictionary-comprehension) that loops through each value in the inner lists of the multidimensional array. We then parse the values of the dictionary into a list.
 | 
			
		||||
 | 
			
		||||
## List of dictionaries
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue