给出scores = { 0.0: "bob", 5.2: "alex", 2.8: "carl"}
要获取输出[ "bob", "carl", "alex" ]
我可以做print([ scores[key] for key in sorted(scores.keys()) ])
这是最好的(最“Python的”)的方式?我想我可以使用scores.items()
会同sorted(key=...)
避免字典查找,但不知道是什么key
参数会。
答案 0 :(得分:0)
如果坚持使用.items()
,关键参数是key=lambda t: t[0]
,但在这种情况下,key=lambda t: t
(由值但断裂的关系)的工作原理是相同的。默认情况下,t
用作密钥,因此您无需指定以下内容:
scores = {0.0: "bob", 5.2: "alex", 2.8: "carl"}
print(sorted(scores.items()))
输出:
[(0.0, 'bob'), (2.8, 'carl'), (5.2, 'alex')]
现在要获取值列表,您可以像这样“解压缩”:
print(
list(list(zip(*sorted(scores.items())))[1])
)
答案 1 :(得分:0)
在dict
上进行迭代将始终使用键,因此您不必使用.keys()
方法。
此外,请在括号前后尝试not to use空间。
scores = {0.0: "bob", 5.2: "alex", 2.8: "carl"}
print([scores[key] for key in sorted(scores)])
有关更多功能性方法,您还可以使用:
scores = {0.0: "bob", 5.2: "alex", 2.8: "carl"}
print(list(map(scores.get, sorted(scores))))
但是您的解决方案非常好:)
答案 2 :(得分:0)
另一种方法是创建一个生成器对象,生成dict的值, 将它们投射到列表中,然后打印出来。
LoginView
答案 3 :(得分:0)
请在代码内容下方尝试使用此代码,它将按键对命令进行排序。
scores = { 0.0: "bob", 5.2: "alex", 2.8: "carl"}
for key, value in sorted(scores.items(), key=lambda kv: kv[0], reverse=True):
print("%s: %s" % (key, value))
5.2:Alex
2.8:卡尔
0.0:鲍勃
答案 4 :(得分:0)
要按字典键对字典进行排序并检索其值:
# This is your initial dictionary
scores = { 0.0: "bob", 5.2: "alex", 2.8: "carl"}
# This sorts your dictionary by it's keys as mentioned by x[0]
sorted_scores = {k:v for k, v in sorted(scores.items(), key=lambda x:x[0])}
# Now we are getting all the values in the sorted order and storing it in result
result = list(sorted_scores.values())
# Now, result will be:
['bob', 'carl', 'alex']
# Also sorted_scores will be:
{0.0: 'bob', 2.8: 'carl', 5.2: 'alex'}