繁体   English   中英

lambda 排序字典中的空格问题

[英]problem with spaces in a sorted dictionary with lambda

我有一个嵌套字典。 我想首先按分数排序,其次按胜利(如果分数相同),最后按字母排序,如果胜利相等。 最后我必须得到完全一样的结果:

    Spain  wins:1 , loses:0 , draws:2 , goal difference:2 , points:5
Iran  wins:1 , loses:1 , draws:1 , goal difference:0 , points:4
Portugal  wins:1 , loses:1 , draws:1 , goal difference:0 , points:4
Morocco  wins:1 , loses:2 , draws:0 , goal difference:-2 , points:3

我的问题是胜利,失败,......与scorces之间的空间。 我的就像:wins: 1 但它必须是 wins:1 没有任何空格。 这是我的代码:

dic={"Iran":{"wins":1,"loses":1,"draws":1,"goal difference":0,"points":4},{"Spain":{"wins":1,"loses":0,"draws":2,"goal difference":2,"points":5}},{"Portugal":{"wins":1,"loses":1,"draws":1,"goal difference":0,"points":4}},{"Morocco":{"wins":1,"loses":2,"draws":0,"goal difference":-2,"points":3}}}
sort_data=sorted(dic.keys(),key=lambda x:(-dic[x]["points"],dic[x]["wins"]))
for items in sort_data:
    x=dic[items]
    print(items," ",str(x).replace("'", "").replace("{","").replace("}", ""))

一切都是正确的,除了我的 output 中的空格,就像:

Iran  wins: 1, loses: 1, draws: 1 , goal difference: 0, points: 4
Portugal  wins: 1, loses: 1, draws: 1, goal difference: 0, points: 4
Morocco  wins: 1, loses: 2, draws: 0, goal difference: -2, points: 3

您可以添加更多replace调用,将","替换为","并将": "替换为":"以在逗号之前添加空格,并在冒号之后删除空格。 请注意,您的代码将在国家名称后打印三个空格,因为添加了另一个空格作为要打印的所有内容之间的分隔符。 使用sep=""来解决这个问题。

for item in sort_data:
    print(item, "  ", str(dic[item]).replace("'", "").replace("{","").replace("}", "")
                                   .replace(",", " ,").replace(": ", ":"), sep="")

或者,您可以使用格式字符串以您喜欢的方式正确格式化不同的键值对,然后join它们与", "连接在一起:

for item in sort_data:
    print(item, " , ".join(f"{k}:{v}" for k, v in dic[item].items()), sep="  ")

对多个 arguments 使用print将它们与空格连接起来。 请改用字符串连接或字符串格式:

A = "aa"
B = "bb"
print(A, B)
# Prints 'aa bb'
print(A + B)
# Prints 'aabb'
print(f"{A}{B}")
# Prints 'aabb'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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