Skip to content

Instantly share code, notes, and snippets.

@LaggAt
Last active March 5, 2018 21:00
Show Gist options
  • Save LaggAt/c5e46528ef2b3cf6809a5a89d5282f86 to your computer and use it in GitHub Desktop.
Save LaggAt/c5e46528ef2b3cf6809a5a89d5282f86 to your computer and use it in GitHub Desktop.
Python: dict supporting lazy sorting, Previous/Next item
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# (c) 2018 Florian Lagg <github@florian.lagg.at>
# Under Terms of GPL v3
class MyDict(dict):
def __init__(self, *args, **kwargs):
self._sortedList = None
super(MyDict, self).__init__(*args, **kwargs)
def __setitem__(self, key, value):
self._sortedList = None
return super(MyDict, self).__setitem__(key, value)
def __delitem__(self, key):
self._sortedList = None
return super(MyDict, self).__delitem__(key)
def pop(self, key):
self._sortedList = None
return super(MyDict, self).pop(key)
@property
def Sorted(self):
if self._sortedList is None:
self._sortedList = sorted(self)
return self._sortedList
def GetPrevKey(self, key):
idx = self.Sorted.index(key)
if idx == 0:
return None
else:
return self.Sorted[idx-1]
def GetNextKey(self, key):
idx = self.Sorted.index(key)
if idx+1 == len(self.Sorted):
return None
else:
return self.Sorted[idx + 1]
def _getKeyOrNone(self, key):
if key is None:
return None
return self[key]
def GetPrev(self, key):
return self._getKeyOrNone(self.GetPrevKey(key))
def GetNext(self, key):
return self._getKeyOrNone(self.GetNextKey(key))
@LaggAt
Copy link
Author

LaggAt commented Mar 5, 2018

Works for me, but probably not every case. Feel free to comment.
Will be used here: https://github.com/LaggAt/DimensionTabler

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment