如何从键的排序顺序中获取字典中的值?

时间:2011-06-21 12:37:43

标签: python sorting dictionary

我的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   

2 个答案:

答案 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()

旁注我稍微更改了你的代码。

  1. 我修改了你的dict语法k:v verus k = v
  2. 我初始化了tree_as_string =“”你定义了一个类变量但从未使用它。
  3. 我添加了str(key),因为key是一个int。
  4. 添加了更多测试编号
  5. 将s更改为 - >
  6. 简化了你的for循环。