我有一个项目列表,我想对多个标准进行排序。
给出输入列表:
module.exports.con = mysql;
标尺:
输出应为:
cols = [
'Aw H',
'Hm I1',
'Aw I2',
'Hm R',
'Aw R',
'Aw I1',
'Aw E',
'Hm I2',
'Hm H',
'Hm E',
]
我知道这个函数需要传递给内置的cols = [
'Hm I1',
'Aw I1',
'Hm I2',
'Aw I2',
'Hm R',
'Aw R',
'Hm H',
'Aw H',
'Hm E',
'Aw E'
]
,但任何想法如何实际写出来?
答案 0 :(得分:7)
您可以为密钥编写一个函数,返回tuple
,每个感兴趣的部分按优先级排序。
def k(s):
m = {'I':0, 'R':1, 'H':2, 'E':3}
return m[s[3]], int(s[4:] or 0), -ord(s[0])
cols = [
'Aw H',
'Hm I1',
'Aw I2',
'Hm R',
'Aw R',
'Aw I1',
'Aw E',
'Hm I2',
'Hm H',
'Hm E',
]
结果:
>>> for i in sorted(cols, key=k):
... print(i)
...
Hm I1
Aw I1
Hm I2
Aw I2
Hm R
Aw R
Hm H
Aw H
Hm E
Aw E
排序tuple
时,首先比较第一个元素。如果它们相同,则tuple
按其第二个元素排序,依此类推。这类似于普通单词按字母顺序排序的方式。
由于我们首先希望所有元素与'I'
在一起,然后'R'
,等等,我们首先将其放在首位。为此,我们定义了一个字典,为每个字母提供所需的优先级。当我们在该字典中查找该字母(字符串中的第四个字符s[3]
)时,键的第一部分就会出现。
接下来,我们想要那封信之后的数字。为此,我们将使用一些短路来获得第五个字符和后续字符(s[4:]
),或者,如果没有,则0
。我们将其发送到int
,'2'
会将该号码评估为'12'
reverse=True
之后的数字。
最后,如果前两个部分相同,则会根据第一个字符对项目进行排序。如果这是一个更简单的排序,我们可以指定ord()
。如果这部分是一个数字,我们可以采取它的负面。我们只需将该字符转换为(0, 2, -65)
的数字,然后将其置为负数。
结果是'Aw I2'
for(int count=0; count < 100; count++)
Log.d("Thread 1":"Count : "+count);
的关键字。
答案 1 :(得分:1)
以下内容可行:
{{1}}
<强>输出强>
{{1}}
答案 2 :(得分:1)
为了比较Aw,Hm和E,H,R,I等,您可以定义两个词典:
现在我们需要将每个字符串解析为三个部分: 1。(Aw或Hm) 2。(E或H或R或I) 3 。整数
现在使用这些组件和字典中的相应值,我们可以从关键函数返回一个元组:
>>> import re
>>> from pprint import pprint
>>> map_1 = {'Aw': 0, 'Hm': 1}
>>> map_2 = {'E': 0, 'H': 1, 'R': 2, 'I': 3}
>>> pattern = re.compile(r'(Aw|Hm)\s([EHRI])(\d*)')
>>> def key_func(x):
a, b, c = pattern.search(x).groups()
return map_2[b], -int(c) if c else 0, map_1[a]
...
>>> pprint(sorted(cols, key=key_func, reverse=True))
['Hm I1',
'Aw I1',
'Hm I2',
'Aw I2',
'Hm R',
'Aw R',
'Hm H',
'Aw H',
'Hm E',
'Aw E']
答案 3 :(得分:1)
让我们创造一些东西:
如何为你的信件分配点数?
def custom_sort(string):
value_dict = {'I':400 ,'R': 300,'H': 200,'E':100, 'Hm': 50, 'Aw':40}
s = string.split()
points = value_dict[s[0]] + value_dict[s[1][0]]
if -len(s[1])>1:
points -= int(s[1][1:])
return -points
cols = [
'Aw H',
'Hm I1',
'Aw I2',
'Hm R',
'Aw R',
'Aw I1',
'Aw E',
'Hm I2',
'Hm H',
'Hm E',
]
print sorted(cols, key=custom_sort)