如何";分类;python字典中的每个;“价值”;是数组吗?

如何";分类;python字典中的每个;“价值”;是数组吗?,python,Python,例如,如果我的字典(或不管它叫什么)看起来像 itemList = [ { 'attribute1': (1,2) 'attribute2': (3,4) ... } { 'attribute1': (5,6) 'attribute2': (7,8) ... } ] 我试图根据属性1的第二个数字对其进行排序: sorted(itemList,key=lambda x:['attribute1'][1] 但这给了我一个错误 IndexError: list index out of range

例如,如果我的字典(或不管它叫什么)看起来像

itemList =
[
{
'attribute1': (1,2)
'attribute2': (3,4)
...
}
{ 
'attribute1': (5,6)
'attribute2': (7,8)
...
}
]
我试图根据属性1的第二个数字对其进行排序:

sorted(itemList,key=lambda x:['attribute1'][1]

但这给了我一个错误

IndexError: list index out of range
如何解决此问题?

应该是:

sorted(itemList, key=lambda x: x['attribute1'][1])
按照您的方式,它试图访问列表中不存在的第二个元素。

应该是:

sorted(itemList, key=lambda x: x['attribute1'][1])
按照您的方式,它试图访问列表中不存在的第二个元素。

尝试:

sorted(itemList, key=lambda x: x['attribute1'][1]
尝试:


您的lambda表达式没有任何意义: 实际上,您正在尝试访问并返回列表的第二个元素:
['attribute1']
,它显然只有一个元素

你应该写的是:

sorted(itemList, key=lambda x: x['attribute1'][1]
                               ^
                               |
             missing variable matching an element of the list
因此,
x
itemList
中的一项

编辑:
作为后续,我仍然不明白为什么['attribute1']只有一个元素?在我的示例中,我有'attribute1':(1,2),那不是第二个元素吗

好吧,因为您感到困惑的是,
['attribute1']
不是
x['attribute1']
,但它仍然是一种有效的python语法,它是一个包含一个元素的未命名列表,字符串
'attribute1'

正如您将
x
定义为
tuple
s的
list
一样,您希望使用
[]
操作符从
tuple
中提取一个值。但是由于该操作符存在于列表中,因此当您访问
['attribute1']
的值时,它在语法上是正确的。但是因为
['attribute1']
只有一个元素,它在语义上是不正确的,因此对您大叫
列表索引超出范围

我不知道你在哪里弄糊涂了。lambda表达式不是魔法,它严格等同于以下内容:

def get_second_of_attribute1(x):
    return x['attribute1'][1]

sorted(itemList, key=get_second_of_attribute1)
这里,
x
sorted()
给函数的参数,该函数定义为第一个参数
itemList
的每个项的
参数,用于进行比较,以便列表按排序返回

总而言之,lambda表达式,一般来说python编译器不会猜测您要做什么,它需要明确的指令。如果您告诉他有什么错误,它会对您大喊大叫(如果不可能),或者实际执行

比如,如果您在
项目列表中查找元组的第一个元素,那么您最终将不会出现错误,但排序返回一个未排序的列表,因为键函数总是返回相同的内容:
'attribute1'


HTH!

您的lambda表达式没有任何意义: 实际上,您正在尝试访问并返回列表的第二个元素:
['attribute1']
,它显然只有一个元素

你应该写的是:

sorted(itemList, key=lambda x: x['attribute1'][1]
                               ^
                               |
             missing variable matching an element of the list
因此,
x
itemList
中的一项

编辑:
作为后续,我仍然不明白为什么['attribute1']只有一个元素?在我的示例中,我有'attribute1':(1,2),那不是第二个元素吗

好吧,因为您感到困惑的是,
['attribute1']
不是
x['attribute1']
,但它仍然是一种有效的python语法,它是一个包含一个元素的未命名列表,字符串
'attribute1'

正如您将
x
定义为
tuple
s的
list
一样,您希望使用
[]
操作符从
tuple
中提取一个值。但是由于该操作符存在于列表中,因此当您访问
['attribute1']
的值时,它在语法上是正确的。但是因为
['attribute1']
只有一个元素,它在语义上是不正确的,因此对您大叫
列表索引超出范围

我不知道你在哪里弄糊涂了。lambda表达式不是魔法,它严格等同于以下内容:

def get_second_of_attribute1(x):
    return x['attribute1'][1]

sorted(itemList, key=get_second_of_attribute1)
这里,
x
sorted()
给函数的参数,该函数定义为第一个参数
itemList
的每个项的
参数,用于进行比较,以便列表按排序返回

总而言之,lambda表达式,一般来说python编译器不会猜测您要做什么,它需要明确的指令。如果您告诉他有什么错误,它会对您大喊大叫(如果不可能),或者实际执行

比如,如果您在
项目列表中查找元组的第一个元素,那么您最终将不会出现错误,但排序返回一个未排序的列表,因为键函数总是返回相同的内容:
'attribute1'


HTH!

作为后续,我仍然不明白为什么['attribute1']只有一个元素?在我的示例中,我有'attribute1':(1,2),这不是第二个元素吗?作为后续,我仍然不明白为什么['attribute1']只有一个元素?在我的示例中,我有'attribute1':(1,2),这不是第二个元素吗?