繁体   English   中英

按 python 打印排序的字典值

[英]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

按键遍历字典并使用打印格式是实现预期output的方法。

我建议使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM