Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中使用数字键对字典列表进行排序_Python_Sorting_Dictionary - Fatal编程技术网

在Python中使用数字键对字典列表进行排序

在Python中使用数字键对字典列表进行排序,python,sorting,dictionary,Python,Sorting,Dictionary,我有一个数组列表,其中包含一个python字典。下面是我的例子: [[(0, 1), 'up'], [(1, 2), 'right'], [(3, 2), None], [(0, 0), 'up'], [(3, 0), 'left'], [(3, 1), None], [(2, 1), 'up'], [(2, 0), 'left'], [(2, 2), 'right'], [(1, 0), 'left'], [(0, 2), 'right']] 我需要做的是根据键(x,y)先在x上订购,然后在

我有一个数组列表,其中包含一个python字典。下面是我的例子:

[[(0, 1), 'up'], [(1, 2), 'right'], [(3, 2), None], [(0, 0), 'up'], [(3, 0), 'left'], [(3, 1), None], [(2, 1), 'up'], [(2, 0), 'left'], [(2, 2), 'right'], [(1, 0), 'left'], [(0, 2), 'right']]
我需要做的是根据键(x,y)先在x上订购,然后在y上订购:可能吗

这里是我想要的输出:

[[(0, 0), 'up'], [(0, 1), 'up'], [(0, 2), 'right'], [(1, 0), 'left'],[(1, 2), 'right'], [(2, 0), 'left'], ....]
我尝试过使用该代码:

s = sorted(s, key = lambda x: (x[0][0][0], x[0][0][1]))
但它的回报是:

TypeError: 'int' object has no attribute '__getitem__'

你订阅得太深了。在您的情况下,仅对元组进行排序,元组的字典顺序适合您的问题:

sorted(s,key = lambda x : x[0])
或不带
lambda
运算符。itemgetter

sorted(s,key = operator.itemgetter(0))
结果:

[[(0, 0), 'up'], [(0, 1), 'up'], [(0, 2), 'right'], [(1, 0), 'left'], [(1, 2), 'right'], [(2, 0), 'left'], [(2, 1), 'up'], [(2, 2), 'right'], [(3, 0), 'left'], [(3, 1), None], [(3, 2), None]]
这个数据集的有趣之处在于,由于上一个参数可以是字符串或
None
,因此不能在没有键的情况下使用
sorted(s)

在这些特定的值上,它似乎是有效的,但在tie(两个相同的元组,其他术语是字符串和
None
)的情况下,
sort
将比较字符串和
None
,这在Python 3中不起作用


但是可以通过使用像
lambda x:(x[0]、x[1]或“”)这样的键函数来解决问题。因此,如果
x[1]
None
则将其更改为一个空字符串,并且比较有效(如果
None
应该是第一个,否则使用
lambda x:(x[0]、-(x[1]不是None)、x[1]或“
置于任何字符串之后).

x
是列表元素,那么您只需要对元组进行排序,所以您需要
x[0]
没有更深的层次:)如果元组包含类似('0','0')的字符串,这会起作用吗,或者应该指定
key=lambda x:(x[0][0],x[0][1])
?您所陈述的内容与重建元组的
x:x[0]
相同。