Вы распутываете свой список и помещаете его в словарь, используя dict.setdefault () :
data = [(4157, 1, 1), (4157, 1, 10), (4157, 2, 1), (4157, 2, 10), (4157, 3, 1),
(4157, 3, 10), (4157, 4, 1), (4157, 4, 10), (4182, 1, 1)]
d = {}
for k,v,p in data:
key = d.setdefault(k,{})
key[v]=p
print(d)
Выход:
{4157: {1: 10, 2: 10, 3: 10, 4: 10}, 4182: {1: 1}}
Вы можете получить доступ к нему:
print( d[4157][3] ) # 10
Результат короче ваших исходных данных, поскольку вы заменяете первое значение на второе:
(4157, 1, 1) => (4157, 1, 10) # 10 replaces 1
(4157, 2, 1) => (4157, 2, 10) # etc.
(4157, 3, 1) => (4157, 3, 10)
(4157, 4, 1) => (4157, 4, 10)
Вместо этого вы можете агрегировать их следующим образом:
for k,v,p in data:
key = d.setdefault(k,{})
key2 = key.setdefault(v,[])
key2.append(p)
print(d)
Чтобы получить вывод:
{4157: {1: [1, 10], 2: [1, 10], 3: [1, 10], 4: [1, 10]}, 4182: {1: [1]}}
и получить к нему доступ
print( d[4157][3] ) # [1, 10]