根据键对 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 字典进行排序? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
添加键的值并按在 Python 中的字典列表中出现的键对其进行排序