根据首选顺序更改字典键的顺序

Changing order of dictionaries keys based on preferred order

输入的是字典,例如:

{'first_name':'Jane', 'occupation': 'astronaut', 'age':27, 'last_name':'Doe'}

键需要重新排列以按特定顺序排列,在列表中给出,例如:

preferred_order = ['first_name', 'last_name', 'age', 'location']

字典可能不包含 preferred_order 列表中的所有键,并且可能包含未出现在列表中的键。

在此特定情况下,排序结果应为:

{'first_name':'Jane', 'last_name':'Doe', 'age':27, 'occupation': 'astronaut'}

location没有被添加到字典中,不在preferred_order 中的键在最后。

建议算法:

  1. 创建一个新的、最初为空的字典;
  2. 迭代preferred_order:对于preferred_order中的每个key,如果旧词典中存在key: value,则将其添加到新词典中,并将其从旧词典中删除旧字典;
  3. 对于旧词典中剩余的每个 key: value 对,将其添加到新词典中。

对于第 3 步,您可以使用 dict.update|=

进一步阅读:

  • documentation on dict.update and |=;
  • more about |=;
  • How do I sort a dictionary by value?;
  • 您可以在 Whosebug 上搜索“按键排序字典”,但请注意大多数答案已过时,建议使用 collections.OrderedDict 而不是 dict,因为 Python 3.7.