我的python类有问题。它包含一个遍历multi_dimensional字典的所有键的方法。字典键可以按以下顺序(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
答案 0 :(得分:3)
请注意,字典是无序的,因此为了确保以有序格式处理值,您需要先对它们进行排序。请在下面找到示例:
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
答案 1 :(得分:1)
你可以使用sorted(我建议因为它会减少你的代码,甚至下面的例子),或者只是在键上调用sort。 Sort不返回值,它只是对提供的列表进行排序。
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()
旁注我稍微更改了你的代码。