簡體   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