Ответ 1
Я установил orderdict на python 2.6 с помощью pip
pip install ordereddict
Упорядоченные словари - чрезвычайно полезные структуры, но, к сожалению, они довольно недавно работают только в версиях 3.1 и 2.7. Как я могу использовать упорядоченный словарь в более старых версиях?
Я установил orderdict на python 2.6 с помощью pip
pip install ordereddict
Согласно документации, для Python версии 2.4 или более поздней этот код. Существует также код от Raymond Hettinger, один из участников PEP. Код, как утверждается, работает под 2.6 и 3.0 и был сделан для этого предложения.
Чтобы импортировать класс OrderedDict для разных версий Python, рассмотрите этот фрагмент:
try:
from collections import OrderedDict
except ImportError:
from ordereddict import OrderedDict
# Now use it from any version of Python
mydict = OrderedDict()
Версии старше Python 2.6 необходимо установить ordereddict
(используя пипс или другие методы), но новые версии будут импортированы из встроенного модуля коллекции.
Кроме того, вы можете просто запрограммировать свой подход, если ваша ситуация позволяет:
def doSomething(strInput): return [ord(x) for x in strInput]
things = ['first', 'second', 'third', 'fourth']
oDict = {}
orderedKeys = []
for thing in things:
oDict[thing] = doSomething(thing)
orderedKeys.append(thing)
for key in oDict.keys():
print key, ": ", oDict[key]
print
for key in orderedKeys:
print key, ": ", oDict[key]
second: [115, 101, 99, 111, 110, 100]
четвертый: [102, 111, 117, 114, 116, 104]
в-третьих: [116, 104, 105, 114, 100]
сначала: [102, 105, 114, 115, 116]сначала: [102, 105, 114, 115, 116]
второй: [115, 101, 99, 111, 110, 100]
в-третьих: [116, 104, 105, 114, 100]
четвертый: [102, 111, 117, 114, 116, 104]
Вы могли бы встроить упорядоченные ключи в свой словарь тоже, я полагаю, поскольку oDict ['keyList'] = orderedKeys
в python2.6 дал мне:
$ pip install ordereddict
Could not find a version that satisfies the requirement from (from versions:)
No matching distribution found for from
но
$ easy_install ordereddict
install_dir /usr/local/lib/python2.6/dist-packages/
Searching for ordereddict
Reading http://pypi.python.org/simple/ordereddict/
Best match: ordereddict 1.1
Downloading https://pypi.python.org/packages/source/o/ordereddict/ordereddict-1.1.tar.gz#md5=a0ed854ee442051b249bfad0f638bbec
Processing ordereddict-1.1.tar.gz
Running ordereddict-1.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-lYgPE3/ordereddict-1.1/egg-dist-tmp-GF2v6g
zip_safe flag not set; analyzing archive contents...
Adding ordereddict 1.1 to easy-install.pth file
Installed /usr/local/lib/python2.6/dist-packages/ordereddict-1.1-py2.6.egg
Processing dependencies for ordereddict
Finished processing dependencies for ordereddict
сделал.
Для тех, кто по какой-то причине не может зависеть от пользователя, имеющего пипс, вот пример реализации действительно ужасного OrderedDict (он неизменен, имеет большинство функций, но ни один из повышения производительности).
class OrderedDict(tuple):
'''A really terrible implementation of OrderedDict (for python < 2.7)'''
def __new__(cls, constructor, *args):
items = tuple(constructor)
values = tuple(n[1] for n in items)
out = tuple.__new__(cls, (n[0] for n in items))
out.keys = lambda: out
out.items = lambda: items
out.values = lambda: values
return out
def __getitem__(self, key):
try:
return next(v for (k, v) in self.items() if k == key)
except:
raise KeyError(key)
Также вы можете попробовать future
, py2-3-совместимую кодовую базу:
future
через pip: pip install future
from future.moves.collections import OrderedDict