按键排序字典并检索值

4
给定 scores = { 0.0: "bob", 5.2: "alex", 2.8: "carl"},要输出 [ "bob", "carl", "alex" ]
您可以使用以下代码:print([ scores[key] for key in sorted(scores.keys()) ])。这是最好的(最“pythonic”)方法吗?我在想是否可以结合 scores.items()sorted(key=...) 来避免字典查找,但不确定该 key 参数应该是什么。

1
字典查找没有明显的成本。你的解决方案非常符合Python风格,但是通过改变算法或者数据结构,你可能会使它更加昂贵。 - Mazdak
3
没问题,你的解决方案很好(尽管.keys()不必要)。 - TigerhawkT3
@TigerhawkT3,好主意,谢谢。 - Frayt
我认为你已经找到了正确的方法。 - Olivier Melançon
5个回答

1

迭代字典将始终使用键,因此您不必使用.keys()方法。

另外,请尝试不要在括号前后使用空格。

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))))

但是您的解决方案非常好 :)

0
另一种方法是创建一个生成器对象,产生字典的值,将它们转换为列表,然后打印出来。

print(list(val for val in scores.values()))


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])
)

在这种情况下,您不需要使用“键”来进行排序。 - Mazdak
我本意是说 t[0],但即使这样,我也不真正需要一个键。 - sam46
如果你想使用排序“items”,我认为你应该执行next(zip(*sorted(scores.items()))) - Mazdak
1
OP只要求从原始字典中获取值列表,而不是键/值元组列表。 - chepner
好的,我会添加这个。 - sam46

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


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:carl
0.0:bob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接