Python深度排序
我的目标如下:Python深度排序,python,python-2.7,sorting,Python,Python 2.7,Sorting,我的目标如下: { a: {size: 4}, b: {size: 8}, c: {size: 2}, d: {size: 3}, e: {size: 9}, f: {size: 23} } 我需要根据Python 2中的size对其进行排序。我可以找到很多关于浅排序的资源,但我不确定如何访问大小值。我努力使用sorted和lamba函数,但它不起作用。我该怎么办 我上一次尝试: domains = sorted(items, key=lambda item: item
{
a: {size: 4},
b: {size: 8},
c: {size: 2},
d: {size: 3},
e: {size: 9},
f: {size: 23}
}
我需要根据Python 2中的size
对其进行排序。我可以找到很多关于浅排序的资源,但我不确定如何访问大小
值。我努力使用sorted
和lamba
函数,但它不起作用。我该怎么办
我上一次尝试:
domains = sorted(items, key=lambda item: item['size'])
但是,我得到了错误:
TypeError: string indices must be integers, not str
编辑
我用@smarx的例子来修正。由于我需要重建完整对象,而不仅仅是关键点,因此我最终使用了:
for name in sorted(items, key=lambda k: items[k]['size'], reverse=True):
像这样的
d = {
"a": {"size": 4},
"b": {"size": 8},
"c": {"size": 2},
"d": {"size": 3},
"e": {"size": 9},
"f": {"size": 23}
}
print(sorted(d, key=lambda k: d[k]["size"]))
# output:
# ['c', 'd', 'a', 'b', 'e', 'f']
我将“对象”转换为Python语法。(我想我上面说的就是你的意思?)
sorted
接受关键字参数key
,该函数返回要排序的对象。因此,我使用查找每个键大小的键
函数进行排序
我希望这是有道理的
更新
根据您试图获得的输出,您可能还想尝试一些其他事情:
print(sorted(d.items(), key=lambda item: item[1]["size"]))
print(sorted(d.values(), key=lambda value: value["size"]))
如果这些都没有帮助,请告诉我们您实际需要什么输出(键、值、两者、其他?)。类似的内容
d = {
"a": {"size": 4},
"b": {"size": 8},
"c": {"size": 2},
"d": {"size": 3},
"e": {"size": 9},
"f": {"size": 23}
}
print(sorted(d, key=lambda k: d[k]["size"]))
# output:
# ['c', 'd', 'a', 'b', 'e', 'f']
我将“对象”转换为Python语法。(我想我上面说的就是你的意思?)
sorted
接受关键字参数key
,该函数返回要排序的对象。因此,我使用查找每个键大小的键
函数进行排序
我希望这是有道理的
更新
根据您试图获得的输出,您可能还想尝试一些其他事情:
print(sorted(d.items(), key=lambda item: item[1]["size"]))
print(sorted(d.values(), key=lambda value: value["size"]))
如果没有这些帮助,请告诉我们您实际需要什么输出(键、值、两者、其他?)也许可以使用排序在
dict.items()
,并将排序键设置为项的值(索引1)大小键
dct = {
"a": {"size": 4},
"b": {"size": 8},
"c": {"size": 2},
"d": {"size": 3},
"e": {"size": 9},
"f": {"size": 23}
}
print(sorted(dct.items(), key=lambda d: d[1]["size"]))
根据您想要的输出类型,此输出返回:
[('c', {'size': 2}), ('d', {'size': 3}), ('a', {'size': 4}),
('b', {'size': 8}), ('e', {'size': 9}), ('f', {'size': 23})]
也许可以使用sorted ondict.items()
,并将sorting键设置为项的值(索引1)的大小
键
dct = {
"a": {"size": 4},
"b": {"size": 8},
"c": {"size": 2},
"d": {"size": 3},
"e": {"size": 9},
"f": {"size": 23}
}
print(sorted(dct.items(), key=lambda d: d[1]["size"]))
根据您想要的输出类型,此输出返回:
[('c', {'size': 2}), ('d', {'size': 3}), ('a', {'size': 4}),
('b', {'size': 8}), ('e', {'size': 9}), ('f', {'size': 23})]
你说你“挣扎”,但它“不起作用”。提供您的代码。你尝试了什么,你期望什么,什么不起作用,怎么做?提供完整的文档。注意:如果您拼写正确,可能会有所帮助(假设您在代码中输入了相同的打字错误)。您可能希望根据大小进行排序。。。但是你没有明确地说。。。对你的问题要更明确,对这两个方面都正确,暗影游侠和顿科波塔你非常接近。。。提示你的lambda被赋予一个键和值的元组…@donkopotamus:不,不是;看起来他们传递的是dict
,而不是dict
的项。如果您尝试索引键(str
),就会看到错误。您说您“挣扎”了,但它“不工作”。提供您的代码。你尝试了什么,你期望什么,什么不起作用,怎么做?提供完整的文档。注意:如果您拼写正确,可能会有所帮助(假设您在代码中输入了相同的打字错误)。您可能希望根据大小进行排序。。。但是你没有明确地说。。。对你的问题要更明确,对这两个方面都正确,暗影游侠和顿科波塔你非常接近。。。提示你的lambda被赋予一个键和值的元组…@donkopotamus:不,不是;看起来他们传递的是dict
,而不是dict
的项。如果尝试索引键(str
),就会看到错误。旁注:在Py3上调用.keys()
是多余的,而在Py2上则是非常浪费的(在Py2上它必须创建额外的临时列表
s)dict
s已经是他们的可编辑键了,所以请忽略这个无关的呼叫。@ShadowRanger谢谢!编辑。就是这样,非常感谢@ShadowRanger我正处于Python的入门阶段,每个问题都非常愚蠢,因为你根本不知道足够的行话来提出正确的问题。至少我知道我的问题很愚蠢。希望您能原谅我:)旁注:在Py3上调用.keys()
是多余的,而在Py2上则是非常浪费的(在Py2上它必须创建额外的临时列表
s)dict
s已经是他们的可编辑键了,所以请忽略这个无关的呼叫。@ShadowRanger谢谢!编辑。就是这样,非常感谢@ShadowRanger我正处于Python的入门阶段,每个问题都非常愚蠢,因为你根本不知道足够的行话来提出正确的问题。至少我知道我的问题很愚蠢。希望你能原谅我:)