所以我有两个清单:
keys = ['Z', 'X', None, None]
values = [ 0 , 1 , None, None]
我需要能够获取这两个列表并根据键值对它们进行排序,然后将其返回给自己.理想情况下,输出将是:
keys = ['X', 'Z', None, None]
values = [ 1 , 0 , None, None]
我在这里尝试的是:
self.keys, self.values = (list(x) for x in zip(*sorted(zip(self.keys,
self.values), key=lambda pair: pair[0])))
这很好用,除了它给我的错误:
TypeError: unorderable types: NoneType() < str()
如何使用此方法对无进行排序?有什么比我正在尝试的更好的方法吗?
最佳答案 只需为您的密钥添加条件以进行排序
keys, values = (list(x) for x in zip(*sorted(zip(keys, values), key=lambda pair: pair[0] if pair[0] is not None else 'temp')))
这样做会将’temp’映射到列表中的任何None值,并且按照排序’temp’的比较顺序大于’X’.大写字母小于小写
>>> 'temp' < 'X'
False