python,如何对dict和list进行排序以保持相互索引一致?

python,如何对dict和list进行排序以保持相互索引一致?,python,Python,我有一个问题: 如果我有字典和列表,例如: mydict={“a”:url1,“b”:url2;“c”:url3;“d”:url4;“e”:url5} mylist=[25,76,3,8,105] 各5个元素 我想对名单进行排序 mylist.sort() 我会这样做: mylist=[3,8,25,76,105] 但是,如果我想并行地迭代mdct和mylist,使mydict的原始index0与mylist的index0重合,即“a”:url1与25重合,该怎么办? 如果我把它分类

我有一个问题: 如果我有字典和列表,例如:


mydict={“a”:url1,“b”:url2;“c”:url3;“d”:url4;“e”:url5}
mylist=[25,76,3,8,105]
各5个元素

我想对名单进行排序


mylist.sort()
我会这样做:


mylist=[3,8,25,76,105]
但是,如果我想并行地迭代mdct和mylist,使mydict的原始index0与mylist的index0重合,即“a”:url1与25重合,该怎么办? 如果我把它分类,秩序就会被打破… 排序“a”后:url1将与3索引一致

问题是如何对mydict和mylist进行排序,使索引在forloop中的迭代过程中仍然像原始顺序一样一致?
“a”:url1→ 25,b“:url2→76等,但mylist应该同时排序,也就是说我必须以某种方式将mydict与mylist一起排序。

如果要保留排序,您可能必须使用
OrderedDict
。对于您的情况,下面的代码应该可以工作。记住
OrderedDict
保留插入顺序

from collections import OrderedDict

mydict = OrderedDict([('a', 'url1'), ('b', 'url2'),
                      ('c', 'url3'), ('d', 'url4'), ('e', 'url5')])

mylist = [25, 76, 3, 8, 105]

result_list, result_dict = zip(*sorted(zip(mylist, mydict.items())))

print(result_list)
print(OrderedDict(result_dict))


您可能有兴趣知道,字典在3.7之前的版本中并不是天生有序的(我想)。在字典中,顺序并不重要,因为你不是通过索引而是通过键值访问值。我有3.7.2,所以这不是我的情况。在forloop中,它将它们从索引0带到索引-1,因此这是一个相当等价的问题。我的观点是,即使你对字典进行排序,你也会通过它的键而不是索引来访问它的值。不是通过索引,它只是为了更好地设置问题的一个抽象(这最终是个坏主意)。FOR cycle从开始到结束一个接一个地迭代它们,并将顺序保持在3.7Awesome!!这就是我所需要的。非常感谢,如果列表中的on元素为None,该怎么办?