通过键排序字典和检索值

时间:2019-01-31 19:59:57

标签: python python-3.x sorting dictionary

给出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参数会。

5 个答案:

答案 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'}