Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.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中模拟类似Sqlite3的元组排序_Python_Sqlite_Sorting - Fatal编程技术网

在Python中模拟类似Sqlite3的元组排序

在Python中模拟类似Sqlite3的元组排序,python,sqlite,sorting,Python,Sqlite,Sorting,我试图对元组列表进行排序,其中某些元组索引不包含任何元组索引。在这种情况下,特定索引位置中无的元组需要优先于元组列表中的其他非无值 例如,如果我有一个如下所示的列表: [ (3.4, 43, None), (5345.6, 42, None), (43.24, 25, None), (323.4, 433, None), (5.6, 42, None), (4.4, 235, None), (None, None, 'Hello'), (5.6, None, None), (None, 235,

我试图对元组列表进行排序,其中某些元组索引不包含任何元组索引。在这种情况下,特定索引位置中无的元组需要优先于元组列表中的其他非无值

例如,如果我有一个如下所示的列表:

[
(3.4, 43, None),
(5345.6, 42, None),
(43.24, 25, None),
(323.4, 433, None),
(5.6, 42, None),
(4.4, 235, None),
(None, None, 'Hello'),
(5.6, None, None),
(None, 235, None),
]
我希望我的最终清单是这样的 (基本上是“按第1列、第3列从表顺序选择*”)

现在,我正在使用

sortedSelectedResult = sorted(selectedResult,key=itemgetter(*indexSortOrderList))
其中,indexSortOrderList是一个列表,其中包含需要对元组列表进行排序的索引顺序列表。但在这种方法中,非索引被随机放置在列表中。我当前的结果如下所示,其中indexSortOrder=[0,2](即)按第一列排序,然后按第三列排序:

[(3.4, 43, None),
 (5345.6, 42, None),
 (43.24, 25, None),
 (323.4, 433, None),
 (5.6, 42, None),
 (4.4, 235, None),
 (None, None, 'Hello'),
 (5.6, None, None),
 (None, 235, None)]
我尝试查看operator.itemgetter并修改函数以应用于我的用例,
但是我也遇到了问题。

您可以添加一个自定义键,将
视为0:

sorted(lst, key=lambda x: (isinstance(x[0], str), x[0] or 0,  isinstance(x[2], str) or x[2] or 0))
代码

lst = [
(3.4, 43, None),
(5345.6, 42, None),
(43.24, 25, None),
(323.4, 433, None),
(5.6, 42, None),
(4.4, 235, None),
(None, None, 'hello'),
(5.6, None, None),
(None, 235, None),
]

print(sorted(lst, key=lambda x: (isinstance(x[0], str), x[0] or 0,  isinstance(x[2], str) or x[2] or 0)))

# [(None, 235, None),
#  (None, None, 'hello'),
#  (3.4, 43, None),
#  (4.4, 235, None),
#  (5.6, 42, None),
#  (5.6, None, None),
#  (43.24, 25, None),
#  (323.4, 433, None),
#  (5345.6, 42, None)]
lst = [
(3.4, 43, None),
(5345.6, 42, None),
(43.24, 25, None),
(323.4, 433, None),
(5.6, 42, None),
(4.4, 235, None),
(None, None, 'hello'),
(5.6, None, None),
(None, 235, None),
]

print(sorted(lst, key=lambda x: (isinstance(x[0], str), x[0] or 0,  isinstance(x[2], str) or x[2] or 0)))

# [(None, 235, None),
#  (None, None, 'hello'),
#  (3.4, 43, None),
#  (4.4, 235, None),
#  (5.6, 42, None),
#  (5.6, None, None),
#  (43.24, 25, None),
#  (323.4, 433, None),
#  (5345.6, 42, None)]