Intersection of two list of dictionaries based on a key

python compare two dictionaries keys and values
intersection of two dictionaries python
python compare two dictionaries with same keys
python intersection of dictionary values
python intersection of two lists
union of two dictionaries python
compare two list of dictionaries python
find common keys in two dictionaries python

I have two different list of dictionaries,

list1 = [{'count': 351, 'att_value': 'one'},
         {'count': 332,  'att_value': 'two'},
         {'count': 336,  'att_value': 'six'},
         {'count': 359,  'att_value': 'nine'},
         {'count': 304,  'att_value': 'four'}]

list2 = [{'count': 359,'person_id' : 4},
         {'count': 351, 'person_id' : 12},
         {'count': 381, 'person_id' : 8}]

How to find an intersection of list_A with list_B based on "count" key by including rest of the key as like list_C?

list3 = [{'count':359, 'att_value' : 'nine', 'person_id':4},
         {'count':351, 'att_value' : 'one', 'person_id':12},
         {'count':381, 'att_value' : '-', 'person_id':8}] 

I would like to retain the keys from list2, but with missing values from list1 represented by "-".


You can do this with a list comprehension. First, build a set of all counts from list2, and then filter out dictionaries based on constant time set membership check.

counts = {d2['count'] for d2 in list2}
list3 = [d for d in list1 if d['count'] in counts]

print(list3)
# [{'count': 351, 'att_value': 'one', 'person_id': 12}, 
#  {'count': 359, 'att_value': 'nine', 'person_id': 4}]

(Re:Edit) To handle other keys (besides just "att_value") appropriately, giving a default value of '-' in the same way, you can use:

keys = list1[0].keys() - {'count'}
idx = {d['count'] : d for d in list1}
list3 = []
for d in list2:
    d2 = idx.get(d['count'], dict.fromkeys(keys, '-'))
    d2.update(d)
    list3.append(d2)

print(list3)
# [{'count': 359, 'att_value': 'nine', 'person_id': 4},
#  {'count': 351, 'att_value': 'one', 'person_id': 12},
#  {'person_id': 8, 'att_value': '-', 'count': 381}]

Python, Count dictionaries in a list in Python · Python - Distinct Flatten dictionaries · garg_ak0109. Check out this Author's contributed articles. If  Given two dictionaries, the task is to find the intersection of these two dictionaries through keys. Let’s see different ways to do this task. Method #1: Using dict comprehension


You can also use pandas library for this:

In [102]: df1 = pd.DataFrame(list1)
In [104]: df2 = pd.DataFrame(list2)

In [106]: pd.merge(df2,df1, on='count', how='left').fillna('-')
Out[106]: 
     count att_value
0    359      nine
1    351       one
2    381         -

Finding the Intersection of Two Dictionaries, Finding the Intersection of Two Dictionaries Credit: Andy McKay, Chris Perkins, Given two dictionaries, you need to find the set of keys that are in both Combining these two small but nice innovations of Python 2.2 with the list-​comprehension the Python 2.2 technique, and 280 microseconds using the filter -based way. A typical intersection of two 500-item dictionaries with 50% overlap, on a typical cheap machine of today (AMD Athlon 1.4GHz, DDR2100 RAM, Mandrake Linux 8.1), took 710 microseconds using has_key, 450 microseconds using the Python 2.2 technique, and 280 microseconds using the filter-based way.


Assuming the dictionaries in list1 share the same keys and that you have Python 3.5 or newer, you can write the following list comprehension.

>>> count2dict = {d['count']:d for d in list1}                                                                                                                  
>>> dummies = dict.fromkeys(list1[0], '-')                                                                                                                      
>>> [{**count2dict.get(d['count'], dummies), **d} for d in list2]                                                                                              
[{'count': 359, 'att_value': 'nine', 'person_id': 4},
 {'count': 351, 'att_value': 'one', 'person_id': 12},
 {'count': 381, 'att_value': '-', 'person_id': 8}]

Intersection of subset between two lists of dicts, In this example, ld0 has two dictionaries, but the "intersection" has four! it's not easy to guess what the function might do, based on its name. list0, list1): """​Return a list of the dictionaries in list0 that compare equal on keys  def lists_of_dicts_intersection_on(keys, list0, list1): """Return a list of the dictionaries in list0 that compare equal on keys to some dictionary in list1. The dictionaries must have hashable values.


With a more verbose for loop, updates objects of list2:

for item2 in list2:
  item2['att_value'] = '-'
  item1 = [ item1 for item1 in list1 if item1['count'] == item2['count'] ]
  if item1: item2.update(item1[0])

print(list2)
#=> [{'count': 359, 'person_id': 4, 'att_value': 'nine'}, {'count': 351, 'person_id': 12, 'att_value': 'one'}, {'count': 381, 'person_id': 8, 'att_value': '-'}]

Getting the difference (delta) between two lists of dictionaries , Use itertools.filterfalse : import itertools. r = list(itertools.filterfalse(lambda x: x in data1, data2)). + list(itertools.filterfalse(lambda x: x in data2,  Python examples to find common items between 2 or more dictionaries i.e. dictionary intersection items. 1. Dictionary intersection using ‘&’ operator. Simplest method is to find intersections of keys, values or items is to use & operator between two dictionaries.


Selecting from lists and dictionaries – Basics – kdb+ and q , or entries from a dictionary. inter, Intersection of two lists or dictionaries of two lists or dictionaries. where, Copies of indexes of a list, or keys or of a dictionary. Which means that first dictionary has 'mexico' and 'panama' as extra keys. You can see that order of the keys is not preserved. Now let us compare two dictionaries based on keys and output information for the values:


[PDF] 0.5 Lab: Introduction to Python—sets, lists, dictionaries , When you type an expression and hit the Enter key, Python evaluates for the union or intersection of two sets, and use such expressions in a comprehension: >>> {x*x for x in S to the list of three digits that represents that integer in base 10. Something like this : I have multiple dicts/key-value pairs like this: [code]d1 = {key1: x1, key2: y1} d2 = {key1: x2, key2: y2} [/code]I want the result to be a new dict (in most efficient way, if possible): [code]d = {key1: (x1, x2), key2: (y1,


Groups of things: lists, dictionaries, and sets, 2 Lists, dictionaries, and sets in docassemble; 3 Gathering information into lists The sorted() function is a built-in Python function that arranges a list in order. There is no index or key that allows you to refer to a particular item; an item is either in the set endif --- code: | fruits_in_common = fruit.intersection(​my_favorites)  Dictionary is quite a useful data structure in programming that is usually used to hash a particular key with value, so that they can be retrieved efficiently.. Let’s discuss various ways of accessing all the keys along with their values in Python Dictionary.