Question: I've got two lists of dictionaries as below:

```
string1 =[
  {"name": "Tom", "age": 10},
  {"name": "Mark", "age": 5},
  {"name": "Pam", "age": 7},
  {"name": "Weranika", "age": 18}
]
string2 =[  {"name": "Tom", "age": 8},
  {"name": "Mark", "age": 5},
  {"name": "Pam", "age": 7}
]

```

And I want to print key/value for item which doesn't exists in the second list of dictionary.

In my case output should return:

```
{"name": "Weranika", "age": 18}

```

Answer: 
```
str1  = [i["name"] for i in string1]

```

get name in the string

```
str2  = [i["name"] for i in string2]

```

name not in string2 but in 1

```
not_in_string_2 = list(set(str1) ^ set(str2))

```

index of the value not in sring2

```
index = []
for x,i in enumerate(string1):
    if i["name"] in not_in_string_2:
        index.append(x)
for i in index:
   print(string1[i])

```

print the result
This method will work even if the lists are in a different order:

First of all, we need to do some processing to turn each dictionary into an *immutable* object. This is so we can add them to a `set`, which is an unsorted container that allows fast membership checking, along with other features.

```
processed_string1 = set((d["name"], d["age"]) for d in string1)
processed_string2 = set((d["name"], d["age"]) for d in string2)

```

Then we can use the `set`'s `difference` method do get the items that are in the first set, but not the second:

```
result_set = processed_string1.difference(processed_string2)

```

Then we just have to convert back to a dictionary:

```
result_list = [{"name": t[0], "age": t[1]} for t in result_set]

```