Python 2.7 按(特定)键打印词典

Python 2.7 按(特定)键打印词典,python-2.7,dictionary,printing,key,Python 2.7,Dictionary,Printing,Key,我是python新手,我有几个字典(都有几乎相同的键),我想在打印时首先显示某个键。 我知道dicts不能被排序,这不是我想做的,我只想按照特定的键顺序打印它们 这就是我到目前为止所做的: class Employees: def __init__(self, name, job, pay, age=None): self.name = name self.job = job self.pay = pay self.age

我是python新手,我有几个字典(都有几乎相同的键),我想在打印时首先显示某个键。 我知道dicts不能被排序,这不是我想做的,我只想按照特定的键顺序打印它们

这就是我到目前为止所做的:

class Employees:
    def __init__(self, name, job, pay, age=None):
        self.name = name
        self.job = job
        self.pay = pay
        self.age = age

    def gatherAttrs(self):
        attrs = []
        for key in self.__dict__:
            attrs.append('%s = %s' % (key, getattr(self,key)))
        return ', '.join(attrs)

    def __str__(self):
        return '%s: %s' % (self.__class__.__name__, self.gatherattrs())


sarah = Employees("Sarah Hopkins", "nurse", 60000, 30)
bob = Employees("Bob Smith", "doctor", 90000)

print sarah
print bob

output:
Employees: job = nurse, pay = 60000, age = 30, name = Sarah Hopkins
Employees: job = doctor, pay = 90000, age = None, name = Bob Smith
我想要的是:

Employees: name = Sarah Hopkins, job = nurse, pay = 60000, age = 30
我希望键“name”(它存在于所有dict中-转换为列表-)成为第一个出现的键值对


我不知道为了实现这一点,我是否需要将dict转换为列表,然后使用索引(即使这可能会在以后添加新属性时产生问题),或者是否应该将它们保留为dict并执行其他操作。

您可以使用。它的行为类似于常规的dict,但它会记住输入的订单项。

由于您有具有固定属性的类,最简单的解决方案是显式迭代:

class Employees:
  def gatherAttrs(self):
    attrs = []
    for key in ["name", "job", "pay", "age"]:
        attrs.append('%s = %s' % (key, getattr(self,key)))
    return ', '.join(attrs)
或者,您只能显式地迭代某些属性

class Employees:
  _iter_attr__prio = ["name"]
  def gatherAttrs(self):
    attrs = []
    for key in self._iter_attr__prio + [key for key in self.__dict__ if key not in self._iter_attr__prio]:
        attrs.append('%s = %s' % (key, getattr(self,key)))
    return ', '.join(attrs)
最后,您可以尝试排序:

class Employees:
  _iter_attr__prio = ["name"]
  def gatherAttrs(self):
    attrs = []
    for key in sorted(self.__dict__, key=lambda key: self. _iter_attr__prio.index(key) if key in self. _iter_attr__prio else 0, reverse=True):
        attrs.append('%s = %s' % (key, getattr(self,key)))
    return ', '.join(attrs)