英文:有序dict惊喜(https://nedbatchelder.com//bl...)作者:NedBatchelder从python3.6开始,正则字典会记住插入的顺序:也就是说,当遍历字典时,您会按照插入元素的相同顺序在字典中获取元素。在3.6之前,字典是无序的:遍历顺序是随机的。关于有序字典,这里有两件令人惊讶的事情。1.获取不到第一个元素由于字典中的元素有特定的顺序,获取第一个(或第N个)元素应该很容易,对吧?错误的!没有办法直接去做。你可能认为d[0]是第一个元素,但它不是,它只是键为0的值,它可能是添加到字典中的最后一个元素。获取第N个元素的唯一方法是遍历字典,直到获得第N个元素。不能根据有序索引进行随机访问。这是列出王牌词典的地方。获取列表的第N个元素是O(1)操作。获取字典的第N个元素(即使已排序)是一个O(N)操作。2.OrderedDict有点不同既然现在字典是有序的,collections.OrderedDict就没用了,对吧?(译注:3.6版本之前的dict是无序的,但是标准库提供了一个有序字典OrderedDict,现在dict是有序的,OrderedDict好像是多余的?)好像是。但它不会被删除,因为这会破坏使用它的代码,而且它有一些常规词典没有的方法。此外,它们在行为上也有细微差别。常规词典在比较相等性时不考虑顺序,但OrderedDict会:d1={"a":1,"b":2}d2={"b":2,"a":1}d1==d2Truelist(d1)['a','b']list(d2)['b','a']fromcollectionsimportOrderedDictod1=OrderedDict([("a",1),("b",2)])od2=OrderedDict([("b",2),("a",1)])od1==od2Falselist(od1)['a','b']list(od2)['b','a'](翻译结束)
