我有一个字典列表,并希望每个项目按特定的属性值排序.
考虑下面的数组,
[{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]
Run Code Online (Sandbox Code Playgroud)
排序时name,应该成为
[{'name':'Bart', 'age':10}, {'name':'Homer', 'age':39}]
Run Code Online (Sandbox Code Playgroud) 我有一份清单清单:
[[12, 'tall', 'blue', 1],
[2, 'short', 'red', 9],
[4, 'tall', 'blue', 13]]
Run Code Online (Sandbox Code Playgroud)
如果我想按一个元素排序,比如高/短元素,我可以通过s = sorted(s, key = itemgetter(1)).
如果我想作为排序依据两个高大/ short和颜色,我可以为每个元素做排序两次,一次,但有一个更快的方法?
所以我正在使用一些预先存在的比较器来比较两个元组中的某些值,如果第一个大于第二个,则返回true,否则返回false.以下是其中一个的代码:
def cmpValue(subInfo1, subInfo2):
"""
Returns True if value in (value, work) tuple subInfo1 is GREATER than
value in (value, work) tuple in subInfo2
"""
# TODO...
if subInfo1[0] > subInfo2[0]:
return True
else:
return False
Run Code Online (Sandbox Code Playgroud)
现在,我有一个字典,其上面有许多类型的元组条目.我想以相反的顺序对它们进行排序,但我真的不明白我将如何实现这一目标.我想的是:
sortedDict = sorted(subjects, key=comparator, reverse = True)
Run Code Online (Sandbox Code Playgroud)
但是我不知道要传递给比较器的是什么,因为每个比较器都有两个参数(subInfo1,subInfo2).我无法改变比较器功能.
我有三个不同的列表.我想基于List2对List1进行排序(按升序排序).但是,我在List2中重复了一遍.然后我想按List3对这些重复进行排序(按降序排列).足够困惑?
是)我有的:
List1 = ['a', 'b', 'c', 'd', 'e']
List2 = [4, 2, 3, 2, 4]
List3 = [0.1, 0.8, 0.3, 0.6, 0.4]
Run Code Online (Sandbox Code Playgroud)
我想要的是:
new_List1 = ['b', 'd', 'c', 'e', 'a']
Run Code Online (Sandbox Code Playgroud)
'b'出现在'd'之前,因为0.8> 0.6.'e'出现在'a'之前,因为0.4> 0.1.
有帮助吗?
谢谢!
我是编程新手,现在我正在用python编写一个排行榜.我想以第一分排序我的联赛,如果有两支球队有相同的分数,我想根据球门差异对他们进行排序,如果他们有相同的净胜球,我想按名字排序.
第一个条件非常简单,并且工作如下:
table.sort(reverse=True, key=Team.getPoints)
Run Code Online (Sandbox Code Playgroud)
如何插入以下两个条件?
我dict喜欢这样的:
data = {'1':{'a':10, 'b':30}, '2':{'a':20, 'b':60}}
Run Code Online (Sandbox Code Playgroud)
我想转换成这样的数据帧:
x y z
1 a 10
1 b 30
2 a 20
2 b 60
Run Code Online (Sandbox Code Playgroud)
有人知道吗?
假设我有一个如下列表:
[['Harry', '4'], ['Anthony', '10'], ['Adam', '7'], ['Joe', '6'], ['Ben', '10']]
# we can say the first element in it's lists is `name`, the second is `score`
Run Code Online (Sandbox Code Playgroud)
我想把它分类:
[['Anthony', '10'], ['Ben', '10'], ['Adam', '7'], ['Joe', '6'], ['Harry', '4']]
Run Code Online (Sandbox Code Playgroud)
因此,首先按分数降序对其进行排序,然后按名称按升序对其进行排序.
我试过了:
>>> sorted(l, key=lambda x: (int(x[1]), x[0]))
[['Harry', '4'], ['Joe', '6'], ['Adam', '7'], ['Anthony', '10'], ['Ben', '10']]
Run Code Online (Sandbox Code Playgroud)
它正在工作,所以现在我只需要逆转它:
>>> sorted(l, key=lambda x: (int(x[1]), x[0]), reverse=True)
[['Ben', '10'], ['Anthony', '10'], ['Adam', '7'], ['Joe', '6'], ['Harry', '4']]
Run Code Online (Sandbox Code Playgroud)
啊,reverse=True简单地颠倒了列表但没有给出期望输出.所以我只想反转输出int(x[1]),但不是x[0] …
在按两个标准对 Python 列表进行排序中, Fouad 给出了以下答案:
sorted(list, key=lambda x: (x[0], -x[1]))
Run Code Online (Sandbox Code Playgroud)
我想将以下列表主要按元组列表排序,主要按每个元素中的第二项按升序排列,然后按降序排列第一个(字母)项:
[('Ayoz', 1, 18, 7), ('Aidan', 2, 4, 9), ('Alan', 2, 4, 9), ('Arlan', 5, 6, 7), ('Luke', 15, 16, 2), ('Tariq', 5, 4, 2)]
Run Code Online (Sandbox Code Playgroud)
给出答案:
[('Ayoz', 1, 18, 7), ('Alan', 2, 4, 9), ('Aidan', 2, 4, 9), ('Tariq', 5, 4, 2), ('Arlan', 5, 6, 7), ('Luke', 15, 16, 2)]
Run Code Online (Sandbox Code Playgroud)
如果可能,请使用上述方法。我试过
tlist = [('Ayoz', 1, 18, 7), ('Aidan', 2, 4, 9), ('Alan', 2, 4, 9), ('Arlan', 5, 6, 7), …Run Code Online (Sandbox Code Playgroud) 我有一个列表列表,看起来像这样:
dateList = [['2014', '4'], ['2015', '6'], ['2017', '6'], ['2016', '2'], ['2016', '3'], ['2017', '9'], ['2016', '6'], ['2017', '3'], ['2014', '8'], ['2014', '10'], ['2017', '10'], ['2014', '9'], ['2014', '3'], ['2015', '11'], ['2015', '2']]
Run Code Online (Sandbox Code Playgroud)
我一直试图按年份排序,然后按月计算.我已经成功地按年使用它进行分类
sortedList = sorted(dateList, key = lambda x: int(x[0]))
Run Code Online (Sandbox Code Playgroud)
但是,我无法想出一种方法可以在按月保持年份升序的同时按月分类.
假设我有一个由多个列表组成的列表,每个列表包含两个项目:
a = [[14, 0.5], [12, 0.8], [22, 0.6], [15, 0.2], [17, 0.5], [18, 0.4]]
Run Code Online (Sandbox Code Playgroud)
我需要先根据每个列表中的第二项从最大到最小重新排序此列表,然后根据从最小到最大的第一项.
我知道如何使用第二项和第一项第二项根据两项重新排序列表:
b = sorted(a, key=lambda item:(item[1], item[0]))
b = [[15, 0.2], [18, 0.4], [14, 0.5], [17, 0.5], [22, 0.6], [12, 0.8]]
Run Code Online (Sandbox Code Playgroud)
但这种返回从排序的列表最小到最大的这两个项目,这不是我所需要的.
这b应该是这样的:
b = [[12, 0.8], [22, 0.6], [14, 0.5], [17, 0.5], [18, 0.4], [15, 0.2]]
Run Code Online (Sandbox Code Playgroud) 我有以下字典:
{1: (8, 3), 0: (8, 0), 2: (2, 3), 3: (2, 0)}
Run Code Online (Sandbox Code Playgroud)
我想通过元组键然后通过字典的键对它进行排序,以便上面将:
[{1: (2, 3), 3: (2, 0),0: (8, 3), 1: (8, 0)}]
Run Code Online (Sandbox Code Playgroud)
我写了以下内容:
result_list = sorted(codebook.items(), key= lambda item: item[1][0])
Run Code Online (Sandbox Code Playgroud)
这通过元组键排序,但之后不是字典键.
我该怎么做?
我会说到这一点,我有这个:
ocurrencias = [('quiero', 1), ('aprender', 1), ('a', 1), ('programar', 1), ('en', 1), ('invierno', 2), ('hace', 1), ('frio', 1), ('este', 1)]
Run Code Online (Sandbox Code Playgroud)
我想通过元组的第二个值然后通过它们的字符串值对它进行排序,然后打印每个元素来获取:
output:invierno 2
a 1
aprender 1
en 1
este 1
frio 1
hace 1
programar 1
quiero 1
Run Code Online (Sandbox Code Playgroud)
不知道我是否说得足够清楚,但我不是很精通英语,所以请原谅我.
提前致谢
python ×12
sorting ×7
list ×6
python-3.x ×4
dictionary ×2
dataframe ×1
pandas ×1
python-3.3 ×1
tuples ×1