如何根据字典键对列表进行排序?蟒蛇

时间:2020-05-04 20:34:53

标签: python list dictionary

我有字典

score={"basketball":[45,63],"baseball":[8,17],"football":[34,55],"soccer":[7,1]}

和一个列表

sports=["football","basketball","baseball","soccer"]

他们是这样对我的列表进行排序以使其与字典匹配的一种方法

["basketball","baseball","football","soccer"]

4 个答案:

答案 0 :(得分:1)

您可以将字典转换成其键的列表,并在此列表中检查一项运动的索引:

>>> sorted(sports, key=lambda sport: list(score).index(sport))
['basketball', 'baseball', 'football', 'soccer']

字典 已排序since Python 3.7(另请参见https://stackoverflow.com/a/39980744/4354477)。

答案 1 :(得分:0)

字典没有排序,因此没有与字典的排序相匹配的排序(没有字典)。您可以观察到这样的事实,即以相同的键/值以不同顺序指定的两个字典被认为是等效的:

Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 22:39:24) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> {'foo': True, 'bar': False} == {'bar': False, 'foo': True}
True

以您的示例为例,最简单的解决方法是按照要添加列表的顺序来初始化列表,因为无论如何这些值都是硬编码的。在更复杂的示例中,解决方案可能是使用OrderedDict或将字典与保持顺序的列表结合使用。

答案 2 :(得分:0)

sort(score.keys())
sort(sports)

尝试一下并打印两个

答案 3 :(得分:0)

如果列表的值与字典的键相同,那么为什么要对列表进行排序?只需拿字典的键,类似于Renaud的建议:

sports = list(score)

如果您使用的Python版本尚不能保证字典条目的顺序,那么整个问题当然没有意义。

如果您希望某项运动的列表和分数的键不同(按设定值),则应定义该行为。

相关问题