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

如何根据字典键对列表进行排序?python,python,list,dictionary,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"] 词典没有排序,因此没有与词典排序相匹配的排序(它没有排序

我有一本字典

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

sports=["football","basketball","baseball","soccer"]
他们是一种对我的列表进行排序以匹配我的字典的方法吗

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

词典没有排序,因此没有与词典排序相匹配的排序(它没有排序)。您可以在以下事实中观察到这一点,即使用相同键/值以不同顺序指定的两个字典被视为等效:

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
,或使用dict与维护排序的列表相结合。

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

>>> sorted(sports, key=lambda sport: list(score).index(sport))
['basketball', 'baseball', 'football', 'soccer']
词典已排序(另请参见)


尝试此操作并同时打印它们

如果列表的值与字典的键相同,为什么要对列表进行排序?只需按字典上的键,就像雷诺建议的那样:

sports = list(score)
如果您使用的Python版本还不能保证字典条目的顺序,那么这一点当然毫无意义


如果您希望在运动列表和分数键不相同(按设置)的情况下使用某些行为,则应定义该行为。

您是否正在查找
sports=[sport for sport in score.keys()]
字典:“dict对象的插入顺序保留性质已声明为Python语言规范的正式部分”
sports = list(score)