如何";分类;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),这不是第二个元素吗?