Python 如何按键的排序顺序从字典中获取值?
我的python类有问题。它包含一个遍历多维字典所有键的方法。字典键的顺序如下(1->(2,3),2->(5,6))。问题是,当该方法试图获取密钥时,有时它以正确的顺序(1,2)获取密钥,有时它以错误的顺序(2,1)获取密钥。任何帮助都将不胜感激。下面是一个非常简单的代码示例Python 如何按键的排序顺序从字典中获取值?,python,sorting,dictionary,Python,Sorting,Dictionary,我的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
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
您可以使用sorted(我建议使用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()
旁注:我把你的代码改了一点
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()
旁注:我把你的代码改了一点
请注意,字典是无序的,因此为了确保以有序格式处理值,您需要首先对它们进行排序。请参阅以下样本:
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
请注意,字典是无序的,因此为了确保以有序格式处理值,您需要首先对它们进行排序。请参阅以下样本:
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
跟我重复一遍:字典是无序的。那里没有类方法。字典是无序的(@Daniel Roseman);)如果你不改变任何东西,你应该得到同样的钥匙顺序。这并不完全是“无序的”,尽管在实践中有这样的说法:字典是无序的。那里没有类方法。字典是无序的(@Daniel Roseman);)如果你不改变任何东西,你应该得到同样的钥匙顺序。这并不完全是“无序”的,尽管在实践中,据说This waysorted()不起作用,因为子属性是字典,它返回一个错误。“'dict'对象没有'sorted'属性”不知道你在说什么,上面的代码可以工作。我修复了您的多个错误。@trey如果您必须对键进行排序,则无法对dict进行排序。sorted()不起作用,因为子属性是字典,它返回一个错误。“'dict'对象没有'sorted'属性”不知道你在说什么,上面的代码可以工作。我修复了您的多个错误。@trey您必须对键进行排序,但无法对dict进行排序。