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 on
dict.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的入门阶段,每个问题都非常愚蠢,因为你根本不知道足够的行话来提出正确的问题。至少我知道我的问题很愚蠢。希望你能原谅我:)