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