我有一个从排序的csv创建的以下列表
list1 = sorted(csv1, key=operator.itemgetter(1))
Run Code Online (Sandbox Code Playgroud)
我实际上想按两个标准对列表进行排序:首先是字段1中的值,然后是字段2中的值.我该怎么做?
我现在是python的新手并且遇到了这个问题,似乎找不到合适的答案.
问题:给定一个单词列表,按照长度(最长到最短)的顺序返回一个具有相同单词的列表,第二个排序标准应该是按字母顺序排列的.提示:你需要考虑两个功能.
这是我到目前为止:
def bylength(word1,word2):
return len(word2)-len(word1)
def sortlist(a):
a.sort(cmp=bylength)
return a
Run Code Online (Sandbox Code Playgroud)
它按长度排序,但我不知道如何将第二个标准应用于此类,即按字母顺序降序.
我有一个元组列表.我想根据两个元素对它们进行排序.以下是示例
unsorted = [('a', 4, 2), ('a', 4, 3), ('a', 7, 2), ('a', 7, 3), ('b', 4, 2), ('b', 4, 3), ('b', 7, 2), ('b', 7, 3)]
sorted = [('a', 4, 2), ('b', 4, 2), ('a', 4, 3), ('b', 4, 3), ('a', 7, 2), ('b', 7, 2), ('a', 7, 3), ('b', 7, 3)]
Run Code Online (Sandbox Code Playgroud)
我知道如何在第二个元素上对它们进行排序:
sorted(unsorted, key = lambda element : element[1])
Run Code Online (Sandbox Code Playgroud)
但如何用两把钥匙做到这一点?
我如何排序的字符串列表key=len第一然后通过key=str?我尝试过以下但是没有给出我想要的那种:
>>> ls = ['foo','bar','foobar','barbar']
>>>
>>> for i in sorted(ls):
... print i
...
bar
barbar
foo
foobar
>>>
>>> for i in sorted(ls, key=len):
... print i
...
foo
bar
foobar
barbar
>>>
>>> for i in sorted(ls, key=str):
... print i
...
bar
barbar
foo
foobar
Run Code Online (Sandbox Code Playgroud)
我需要得到:
bar
foo
barbar
foobar
Run Code Online (Sandbox Code Playgroud) 我想知道用两个键对元组列表进行排序的Pythonic方法是什么,其中用一个(并且只有一个)键进行排序将是相反的顺序,而用另一个键进行排序将不区分大小写.更具体地说,我有一个包含元组的列表:
myList = [(ele1A, ele2A),(ele1B, ele2B),(ele1C, ele2C)]
Run Code Online (Sandbox Code Playgroud)
我可以使用以下代码用两个键对其进行排序:
sortedList = sorted(myList, key = lambda y: (y[0].lower(), y[1]))
Run Code Online (Sandbox Code Playgroud)
要按相反顺序排序,我可以使用
sortedList = sorted(myList, key = lambda y: (y[0].lower(), y[1]), reverse = True)
Run Code Online (Sandbox Code Playgroud)
但这会按两个键的相反顺序排序.
任何提示都非常感谢.
我的Python字符串列表类似x但足够长:
x = ['aaa','ab','aa','c','a','b','ba']
Run Code Online (Sandbox Code Playgroud)
我想对此列表进行排序为: ['a', 'b', 'c', 'aa', 'ab', 'ba', 'aaa']和我一样在以下2步:
>>> x.sort()
>>> x.sort(key=len)
>>> x
['a', 'b', 'c', 'aa', 'ab', 'ba', 'aaa']
Run Code Online (Sandbox Code Playgroud)
但我需要一步到位:我还使用lambda函数绑定(采取帮助):
>>> x.sort(key=lambda item: (item, len(item)))
>>> x
['a', 'aa', 'aaa', 'ab', 'b', 'ba', 'c']
Run Code Online (Sandbox Code Playgroud)
但不是我想要的:
有可能一步到位吗?让我开心.
我的Python:
~$ python --version
Python 2.6.6
Run Code Online (Sandbox Code Playgroud) 我有以下字典
tempdata = {'logs': [
{'starttime':'901',
'time':'5'
},
{'starttime':'902',
'time':'3'
},
{'starttime':'900',
'time':'2'
},
{'starttime':'901',
'time':'2'
},
{'starttime':'905',
'time':'1'
},
{'starttime':'904',
'time':'1'
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想主要按starttime. 我做得很好:
tempdata['logs'] = sorted(tempdata['logs'],key=lambda k: k['starttime'])
Run Code Online (Sandbox Code Playgroud)
但是现在,我也想按时间对它们进行排序。
预期输出:
tempdata = {'logs': [
{'starttime':'900',
'time':'2'
},
{'starttime':'901',
'time':'2'
},
{'starttime':'901',
'time':'5'
},
{'starttime':'902',
'time':'3'
},
{'starttime':'904',
'time':'1'
},
{'starttime':'905',
'time':'1'
}
]
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能完成这个任务?我查找了 sorted(),但找不到我要找的东西。
只是作为序言,我已经查看了与此问题有关的帖子,但他们还没有完全回答我的问题。
所以我只想知道如何以两种方式根据对象的属性对对象列表进行排序:
这是我的课程列表:
mainList = [
hero( name='SirGoose', classes='Fighter', level=150 ),
hero( name='Conan', classes='Barbarian', level=160 ),
hero( name='KingArthur', classes='Knight', level=170 )
]
Run Code Online (Sandbox Code Playgroud)
所以我真正在寻找的是一种对这个列表进行排序的方法,即英雄的名字按字母顺序排序,然后是另一种级别的方法。谢谢!
有一个类有两个值域。我想按照以下标准对此类对的列表进行排序:
使用 lambda 仅按第一个域排序很容易:
list.sort(key=lambda x:x.first)
Run Code Online (Sandbox Code Playgroud)
或者
sorted(list, key=lambda x:x.first)
Run Code Online (Sandbox Code Playgroud)
但如果我想进一步比较 x.second,我该如何编写 lambda 函数呢?
我为此搜索了很多时间。我对使用关键参数进行排序有了一些想法。
我有一个像这样的元组列表。它是由 OpenCV 霍夫圆检测获得的。
correctC = [(298, 172, 25), (210, 172, 25), (470, 172, 25), (386, 172, 22), (648, 172, 25), (384, 44, 22), (558, 110, 22), (562, 170, 25), (382, 108, 25), (734, 172, 25), (126, 172, 24), (646, 44, 22), (296, 110, 23), (126, 234, 26), (470, 236, 25), (296, 44, 25), (208, 108, 24), (38, 170, 25), (730, 110, 22), (730, 44, 25), (468, 110, 23), (468, 44, 25), (208, 44, 25), (124, 44, 22), (558, 44, …Run Code Online (Sandbox Code Playgroud) python ×10
sorting ×9
list ×3
key ×2
python-2.7 ×2
python-3.x ×2
tuples ×2
class ×1
dictionary ×1
lambda ×1
python-2.6 ×1