根据键对 Python 字典进行排序? [复制]

Posted

技术标签:

【中文标题】根据键对 Python 字典进行排序? [复制]【英文标题】:Sorting Python Dictionary based on Key? [duplicate] 【发布时间】:2013-09-27 18:05:29 【问题描述】:

我创建了一个 python 字典,其中包含这种形式的键:

11, 10, 00, 01, 20, 21, 31, 30

键是字符串

我想按以下排序顺序维护我的字典:

00, 10, 20, 30, 01, 11, 21, 31 

这是基于键的第二个值。

我试过这个sorted(dict.items(), key = lambda s: s[1]) 并得到了这样的键:

20, 30, 21, 31, 01, 11, 10, 00

有人可以指导我吗?

【问题讨论】:

您考虑过使用OrderedDict吗? 这个问题绝对是重复的。 :) 我什至数不清我看过多少次了。 嗨。 items 返回元组列表,其中第一项是键,第二项是值。因此,如果您想按键对它们进行排序,则应使用 sorted(dict.items(), key = lambda s: s[0]) 但在这种情况下,您将键升序排序如果您想按示例进行排序11, 10, 00, 01, 20, 21, 31, 30 > 我想按以下排序顺序维护我的字典:00, 10, 20, 30, 01, 11, 21, 31 你应该将你的键反转排序function sorted(dict.items(), key = lambda s: ''.join(reversed(s[0]))) 【参考方案1】:

你已经差不多了,但关键是元组的第一项:

sorted(dict.items(), key=lambda s: s[0])

【讨论】:

我读到“密钥的第二个值”可能是:s[0][1] @JonClements:啊,好点子。谢谢。 使用key=lambda (key, val): key[1] 来明确表达也无妨 现在不是时候有人建议使用operator.itemgetter 来摆脱 lambda 混乱了吗? :P @anu:在撰写本文时没有订购字典。在 Python 3.7 中,您可以将此表达式包装在 dict() 中以再次获取字典。【参考方案2】:

字典使用一种叫做散列的东西,它不能这样排序。你可以做的是使用dict.keys().sort(key = lambda s: s[1]) 并从那里迭代或继续。

【讨论】:

这不会如你所愿。列表的.sort 方法对列表进行就地操作,并且该列表是短暂的。下次你得到 dict.keys() 它不会被排序。它不会是 same 列表。 是的,你是对的! x = dict.keys() 然后x.sort(...) 谢谢!

以上是关于根据键对 Python 字典进行排序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

根据值然后键对HashMap进行排序? [复制]

添加键的值并按在 Python 中的字典列表中出现的键对其进行排序

按值然后键对字典进行排序

使用字典中的键对对象数组进行排序

使用 std::string 作为字典顺序的键对 unordered_map 进行排序

如何使用对象的键对对象数组进行排序? [复制]