@mampfgnom: Dann müsstest Du Dir ein zusätzliches Wörterbuch anlegen was die Z-Koordinate oder gar ein Tupel aus NR und Z-Koordinate auf den Rest abbildet. Die Frage ist, ob sich das alles überhaupt lohnt. Und ob Du hier nicht gerade dabei bist eine relationale Datenbank nachzubauen.
Um hier ein passende Antort zu geben, müsstest Du im voraus wissen wieviele Daten das ungefähr sind, und wie oft nach welchen Suchkriterien darauf zugegriffen wird. Also letztendlich die gleichen Fragen, die man sich bei einer Datenbank auch stellen muss, wenn man überlegt welche Indexe man für eine Tabelle anlegen möchte. Denn nichts anderes sind Deine Wörterbücher ja.
Bei dem bisher vorhandenen macht es jedenfalls keinen Sinn die Koordinaten mit im Schlüssel zu haben, wenn die ebenfalls enthaltene NR eindeutig ist. Denn dann würde die ja ausreichen um auf den Wert zuzugreifen. Man könnte also so als Grunddatenstruktur ein Wörterbuch nehmen, dass NR auf Koordinaten und die beiden bisherigen Werte abbildet. Um Dein Beispiel zu übernehmen:
Code: Alles auswählen
d = { 1: (1, (1, 1, 1), [1, 0]), 2: (2, (1, 3, 2), [3, 2]) }
Allerdings auch nur falls tatsächlich jemals über die NR auf die Werte zugegriffen wird. Sonst macht das nicht viel Sinn.
Wenn man weitere Wörterbücher für den Zugriff auf diese anlegt, dann sollte man das in einer Klasse kapseln falls diese Wörterbücher nicht nur lokal, temporär angelegt werden. Damit man sicherstellen kann, das alle Datenstrukuren verändert werden, wenn man Änderungen vornimmt. Überhaupt würde ich fast schon zu Klassen oder zumindest `collections.namedtuple` greifen bei diesen Daten, um diesen ganzen „anonymen” Zahlen Namen geben zu können, damit man im Quelltext besser sieht was da eigentlich vor sich geht.