[英]Print sorted dictionary values by python
如何按 python 列表中的某些日期值对字典进行排序? 这是我的字典:
{'X': [1, 1, 1, 0, 4], 'Y': [1, 1, 1, 0, 4], 'Z': [1, 1, 1, 0, 4], 'B': [1, 1, 1, 0, 4]}
我想像这样打印它:
X wins:1 , loses:0 , draws:2 , goal difference:2 , points:5
Y wins:1 , loses:1 , draws:1 , goal difference:0 , points:4
Z wins:1 , loses:1 , draws:1 , goal difference:0 , points:4
B wins:1 , loses:2 , draws:0 , goal difference:-2 , points:3
在字典值中,列表如下:[wins, losts, draws, goal Difference, points]
我想按点对它进行排序,如果点与胜利相同,并且如果两者都按键名(A、Y、Z 或 B)相等。
请帮助我,谢谢
就像是:
dic = {'X': [1, 1, 1, 0, 4], 'Y': [1, 1, 1, 0, 4], 'Z': [1, 1, 1, 0, 4], 'B': [1, 1, 1, 0, 4]}
for k, v in dic.items():
# note: \t is a tab spacing
print(k, "\twins:", v[0], "\tlosses:", v[1], "\tdraws:", v[2], "\tgoal difference:", v[3], "\tpoints:", v[4])
>>X wins: 1 losses: 1 draws: 1 goal difference: 0 points: 4
>>Y wins: 1 losses: 1 draws: 1 goal difference: 0 points: 4
>>Z wins: 1 losses: 1 draws: 1 goal difference: 0 points: 4
>>B wins: 1 losses: 1 draws: 1 goal difference: 0 points: 4
代码:
dct = {'X': [1, 1, 1, 0, 4], 'Y': [1, 1, 1, 0, 4], 'Z': [1, 1, 1, 0, 4], 'B': [1, 1, 1, 0, 4]}
for i in dct:
print("{}, wins:{}, loses:{}, draws:{}, goal difference:{}, points:{}".format(i, dct[i][0], dct[i][1], dct[i][2], dct[i][3], dct[i][4]))
output:
X, wins:1, loses:1, draws:1, goal difference:0, points:4
Y, wins:1, loses:1, draws:1, goal difference:0, points:4
Z, wins:1, loses:1, draws:1, goal difference:0, points:4
B, wins:1, loses:1, draws:1, goal difference:0, points:4
我建议使用pandas ,因为它具有用于此类数据处理的内置功能,例如
import pandas as pd
d = {'X': [1, 1, 1, 0, 2], 'Y': [1, 1, 1, 0, 2], 'Z': [1, 1, 1, 0, 4], 'B': [2, 1, 1, 0, 4]}
df = pd.DataFrame(d).T
df.reset_index(inplace=True)
df.columns = ['name', 'wins', 'losses', 'draws', 'goal difference', 'points']
df.sort_values(['points', 'wins', 'name'], ascending=False)
name wins losses draws goal difference points
3 B 2 1 1 0 4
2 Z 1 1 1 0 4
1 Y 1 1 1 0 2
0 X 1 1 1 0 2
感谢您的回答如果尝试此代码以获得最佳答案:
dic={'X': [1, 1, 1, 1, 4], 'Y': [2, 1, 0, 1, 6], 'Z': [1, 2, 0, 0, 3], 'B': [1, 1, 1, 1, 4]}
dct=sorted(sorted(dic.items(), key = lambda x : x[0]), key = lambda x : (x[1][4], x[1][0]), reverse = True)
for a,b in dct:
print("{} wins:{} , loses:{} , draws:{} , goal difference:{} , points:{}".format(a, b[0], b[1], b[2], b[3], b[4]))
output 是:
Y wins:2 , loses:1 , draws:0 , goal difference:1 , points:6
B wins:1 , loses:1 , draws:1 , goal difference:1 , points:4
X wins:1 , loses:1 , draws:1 , goal difference:1 , points:4
Z wins:1 , loses:2 , draws:0 , goal difference:0 , points:3
这段代码首先是排序点。 如果某些点相等,则排序获胜,然后将名称排序为字母。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.