У меня проблема с моим классом python. он содержит метод, который проходит через все ключи многомерного словаря. Клавиши словаря могут быть в следующем порядке (1-> (2,3), 2-> (5,6)). проблема в том, когда метод пытается получить ключи, иногда он получает их в правильном порядке (1,2), а иногда он получает их в неправильном порядке (2,1). любая помощь будет оценена. ниже - очень простой пример того, как выглядит код
class tree:
tree_as_string = ""
def __init__(self):
self.id = ""
self.daughters = {1 = 'node0', 2 = 'node1'}
def get_as_string(self):
s = ''
for key in self.daughters:
tree_as_string = s.join([tree_as_string, key])
return tree_as_string
Обратите внимание, что словари неупорядочены, поэтому, чтобы быть уверенными, что значения будут обрабатываться в упорядоченном формате, вам нужно сначала отсортировать их. Ниже приведен пример:
d={1:{2:'tst', 3:'tst2'}, 4:{...} }
for key in sorted(d):
for skey in sorted(d[key]):
#do something
ИЛИ что-то вроде этого:
from operator import itemgetter
d={1:{2:'tst', 3:'tst2'}, 4:{6:'tst7', 7:'tst12'} }
for key, val in sorted(d.items(), key=itemgetter(0)):
for skey, sval in sorted(val.items(), key=itemgetter(0)):
print key, skey, sval
Это означает, что в вашем случае:
class tree(object):
tree_as_string = ""
def __init__(self):
self.id = ""
self.daughters = {1 = 'node0', 2 = 'node1'}
def get_as_string(self):
s = ''
for key in sorted(self.daughters):
tree_as_string = s.join([tree_as_string, key])
return tree_as_string
Вы можете использовать отсортированный (который я бы предложил, потому что он уменьшает ваш код, еще один пример ниже), или просто вызывайте сортировку по клавишам. Сортировка не возвращает значение, оно просто сортирует любой список.
class tree:
def __init__(self):
self.id = ""
self.daughters = {10: "test10", 2 : 'node2', 1 :'node1', 0 : 'node0'}
def get_as_string_using_sorted(self):
''' Makes me happy'''
return '->'.join(str(k) for k in sorted(self.daughters))
def get_as_string(self):
s = '->'
keys = self.daughters.keys()
keys.sort()
return s.join(str(k) for k in keys)
t = tree()
print t.get_as_string()
print t.get_as_string_using_sorted()
Боковое примечание. Я немного изменил свой код.