Если список отсортирован по uid одинаковой длины, это должно сработать:
list1 = [(1,'A','z'),(2,'B','y'),(3,'C','z'),(4,'D','w')]
list2 = [(1,'G','z'),(2,'B','x'),(3,'D','q'),(5,'F','z')]
result = {k2 : v2 for (k1, v1, _), (k2, v2, _) in zip(list1, list2) if k1 == k2 and v1 != v2}
print(result)
Вывод
{1: 'G', 3: 'D'}
Если вышеуказанные условияне удерживать, вы можете сделать:
list1 = [(1, 'A', 'z'), (2, 'B', 'y'), (3, 'C', 'z'), (4, 'D', 'w')]
list2 = [(1, 'G', 'z'), (2, 'B', 'x'), (3, 'D', 'q'), (5, 'F', 'z')]
d1 = {k1: v1 for k1, v1, _ in list1}
d2 = {k2: v2 for k2, v2, _ in list2}
result = {k2: v2 for k2, v2 in d2.items() if k2 in d1 and d1[k2] != v2}
print(result)
Выход
{1: 'G', 3: 'D'}