我想先按数字排序字典的键,然后按小写字母,再按大写字母的顺序对字典进行排序,然后将其返回给字典并返回正确的键值。我想到了这一点,但我认为这太长了。(board是您要排序的给定字典)board示例:
board = {
(3, 4) : 0,
("a", 4) : 0,
(1, 3) : 0,
("X", 5) : 5,
("X", 1) : 1
}
我的问题是是否可以缩短代码。
x = []
y = []
for k in dict.keys(board):
if str(k[0]).islower():
list.append(x, (k, board[k]))
for k in dict.keys(board):
if k[0] == "X":
list.append(y, (k, board[k]))
for k in range(0, len(x)):
del board[x[k][0]]
for k in range(0, len(y)):
del board[y[k][0]]
x = sorted(x)
y = sorted(y)
for k in range(0, len(x)):
board[x[k][0]] = x[k][1]
for k in range(0, len(y)):
board[y[k][0]] = y[k][1]
根据所需顺序但基于键元组进行以下排序。
因此('X',1)应该在('X',5)之前,因为第一个元素相等,因此取决于第二个元素。
排序例程
def sort_dict(d):
def ordering(i):
"""Create ordering so that numbers are before strings
lowercase strings are before upper case strings"""
return ([isinstance(i, int), isinstance(i, str) and i.islower(), isinstance(i, str) and i.isupper()].index(True), i)
# By applying ordering to all elements of key, we create a new tuple
# which allows us to compare
return dict(sorted(d.items(), key=lambda kv: tuple(map(ordering, kv[0]))))
测试
board = {(3,4):0,("a",4):0,(1,3):0,("X",5):5,("X",1):1}
print(sort_dict(board))
输出量
{(1, 3): 0, (3, 4): 0, ('a', 4): 0, ('X', 1): 1, ('X', 5): 5}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句