【发布时间】:2015-05-28 19:34:57
【问题描述】:
所以我有这本字典,我正在将其转换为 OrderedDict。在转换时,我想按其键出现在单独元组中的顺序对 OrderedDict 进行排序。我想附加到 OrderedDict 末尾的任何其他值。应该忽略排序元组中不存在的键。
我想我已经掌握了大部分,但我无法将我的大脑包裹在 lambda 排序函数上。你能帮我解决掉吗?
from collections import OrderedDict
d = {
'spam': 'tasty',
'subtitle': 'A Subtitle',
'title': 'Test Title',
'foo': 'bar',
}
key_order = ('title', 'subtitle', 'non_in_dictionary')
ordered_dict = OrderedDict(sorted(d.items(), key=lambda ???? ))
应该产生ordered_dict:
{
'title': 'Test Title',
'subtitle': 'A Subtitle',
'spam': 'tasty',
'foo': 'bar',
}
【问题讨论】:
-
对于不在
key_order元组中的键,您打算按什么顺序排列? -
@jonrsharpe,我的问题是我不知道要尝试什么;我很茫然。
-
@tzaman,我不挑剔。我想是按字母顺序排列的。我实际上是从 JSON 文件中引入数据(具有固有顺序,尽管 JSON 不关心),因此我将
spam放在foo之前。 -
@niteshade 只是看到你提到 我实际上是从 JSON 文件中引入数据 - 看看在加载 JSON 时使用
object_pairs_hook- 见 this post举些例子。如果您知道您的属性在 JSON 数据中的顺序正确,那将是一个更有效的解决方案。 -
@JonClements,非常感谢,看起来不错。我会记住这一点,以备将来参考。大多数 JSON 元素的顺序都是正确的,但我仍然需要将一些元素拉到顶部,所以无论如何我都会进行一些排序。无论如何,我真的很感激。
标签: python