我有一个类似于下面的元组列表:
[('abc', 121),('abc', 231),('abc', 148), ('abc',221)]
Run Code Online (Sandbox Code Playgroud)
我想按元组内的整数值按升序对此列表进行排序.可能吗?
我有一个类似于下面的元组列表:
("Person 1",10)
("Person 2",8)
("Person 3",12)
("Person 4",20)
Run Code Online (Sandbox Code Playgroud)
我想要产生的是按元组的第二个值按升序排序的列表.所以L [0]应该("Person 2", 8)在排序之后.
我怎样才能做到这一点?使用Python 3.2.2如果有帮助.
我有以下代码:
# initialize
a = []
# create the table (name, age, job)
a.append(["Nick", 30, "Doctor"])
a.append(["John", 8, "Student"])
a.append(["Paul", 22, "Car Dealer"])
a.append(["Mark", 66, "Retired"])
# sort the table by age
import operator
a.sort(key=operator.itemgetter(1))
# print the table
print(a)
Run Code Online (Sandbox Code Playgroud)
它创建一个4x3表,然后按年龄对其进行排序.我的问题是,到底是key=operator.itemgetter(1)做什么的?该operator.itemgetter函数是否返回项目的值?为什么我不能只输入那样的东西key=a[x][1]?或者我可以吗?与运营商怎么能打印等形式的一定值3x2是22?
Python如何对表进行排序?我可以反向排序吗?
如何根据第一个年龄段的两列对其进行排序,然后如果年龄与b名称相同?
我怎么能不这样做operator?
我需要首先对字典进行排序,使用值进行排序reverse=True,对于重复值,按键排序,reverse=False
到目前为止,我有这个
dict = [('B', 3), ('A', 2), ('A', 1), ('I', 1), ('J', 1)]
sorted(dict.items(), key=lambda x: (x[1],x[1]), reverse=True)
Run Code Online (Sandbox Code Playgroud)
返回......
[('B', 3), ('A', 2), ('J', 1), ('I', 1), ('A', 1)]
Run Code Online (Sandbox Code Playgroud)
但我需要它:
[('B', 3), ('A', 2), ('A', 1), ('I', 1), ('J', 1)]
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,当值相等时,我只能按指定的方式对键进行排序......但是如何让它们以越来越多的方式排序呢?
我很好奇是否有任何关于哪个operator.itemgetter(0)或哪个lambda x:x[0]更好用的指示,特别是sorted()作为key关键字参数,因为这是首先考虑的用途.有任何已知的性能差异吗?是否有任何与PEP相关的偏好或指导?
我有一个包含用户和分数的列表列表,如下所示:
[["user1", 100], ["user2", 234], ["user3", 131]...]
Run Code Online (Sandbox Code Playgroud)
我想生成一个列表,按递减顺序按分数对用户进行排序:
[["user2", 234], ["user3", 131], ["user1", 100]...]
Run Code Online (Sandbox Code Playgroud)
我怎么可能这样做呢?
c2=[]
row1=[1,22,53]
row2=[14,25,46]
row3=[7,8,9]
c2.append(row2)
c2.append(row1)
c2.append(row3)
Run Code Online (Sandbox Code Playgroud)
c2 就是现在:
[[14, 25, 46], [1, 22, 53], [7, 8, 9]]
Run Code Online (Sandbox Code Playgroud)
我如何c2以这样的方式排序,例如:
for row in c2:
sort on row[2]
Run Code Online (Sandbox Code Playgroud)
结果将是:
[[7,8,9],[14,25,46],[1,22,53]]
Run Code Online (Sandbox Code Playgroud)
另一个问题是我如何首先按行排序[2]并在行集[1]内排序
输入是未排序的元组列表:
x = [('herr', 1),
('dapao', 1),
('cino', 1),
('o', 38),
('tiao', 2),
('tut', 1),
('poh', 6),
('micheal', 1),
('orh', 1),
('horlick', 3),
('si', 1),
('tai', 1),
('titlo', 1),
('siew', 17),
('da', 1),
('halia', 2)]
Run Code Online (Sandbox Code Playgroud)
目标是找到n计数最少的最后一个键,即所需的输出:
['orh', 'si', 'tai', 'titlo', 'da']
Run Code Online (Sandbox Code Playgroud)
我试过这样做:
[-n:]从中找到元组列表Counter.most_common()[-n:]dict转换为dict即
n = 5
list(dict(Counter(dict(x)).most_common()[-n:]).keys())
Run Code Online (Sandbox Code Playgroud)
是否有一种不太复杂的方式来获得相同的输出?
我也可以这样做:
from operator import itemgetter
output, *_ = zip(*sorted(x, key=itemgetter(1))[n:])
list(output)
Run Code Online (Sandbox Code Playgroud)
但现在我已经只是换出Counter.most_common与sorted和itemgetter.然后我仍然需要zip(*list)通过从zip后的每个元组列表中解压缩第一个值来提取密钥. …
我想说:
student_tuples = [ ('john', 'A', 15),
('peter', 'B', 12),
('dave', 'C', 12)]
Run Code Online (Sandbox Code Playgroud)
我如何将它排序为这样:
student_tuples = [('john', 'A', 15), ('dave', 'C', 12), ('peter', 'B', 12)]
Run Code Online (Sandbox Code Playgroud)
我能想到的是:
from operator import itemgetter
sorted(student_tuples, key=itemgetter(2,0), reverse=True)
Run Code Online (Sandbox Code Playgroud)
但是输出将是:
student_tuples = [('john', 'A', 15), ('peter', 'B', 12), ('dave', 'C', 12)]
Run Code Online (Sandbox Code Playgroud)
那不是我想要的.我怎样才能使用itemgetter或其他更简单的方法呢?
如何按“列”对列表列表进行排序,即按每个列表的第 i 个元素对列表进行排序?
例如:
a=[['abc',5],
['xyz',2]]
print sortByColumn(a,0)
[['abc',5],
['xyz',2]]
print sortByColumn(a,1)
[['xyz',2],
['abc',5]]
Run Code Online (Sandbox Code Playgroud) python ×10
sorting ×7
list ×4
dictionary ×2
tuples ×2
counter ×1
python-2.7 ×1
python-3.x ×1
reverse ×1