如何根据字典键对列表进行排序?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)