Well, that would still defeat the purpose, wouldn't it? The items are no more ordered than the headers dict itself. Also, items() doesn't return a sequence -- it's an ItemsView (which inherits from Set) and presumably it's not Ordered.

I guess my question is not so much how to prevent getting an exception -- I'm trying to tease out what the right order for the headers would be. Or perhaps I'm just trying to understand what the code is doing (the snippet shown mostly looks like bad code to me).

On Mon, Nov 9, 2015 at 12:03 AM, Ram Rachum <ram@rachum.com> wrote:
I'm not Andrew, but I'm guessing simply writing `OrderedDict(headers.items())`.

On Mon, Nov 9, 2015 at 6:28 AM, Guido van Rossum <guido@python.org> wrote:
So if OrderedDict had always rejected construction from a dict, how would you have written this?


On Sunday, November 8, 2015, Andrew Barnert via Python-ideas <python-ideas@python.org> wrote:
On Nov 8, 2015, at 14:10, Serhiy Storchaka <storchaka@gmail.com> wrote:
>
>> On 08.11.15 23:12, Sjoerd Job Postmus wrote:
>> On 8 Nov 2015, at 20:06, Amir Rachum <amir@rachum.com
>> <mailto:amir@rachum.com>> wrote:
>>> As part of BasicStruct I intend to allow the use of mapping types as
>>> __slots__, with the semantics of default values..
>>> So it'll look something like this:
>>>
>>>    class Point(BasicStruct):
>>>        __slots__ = {'x': 5, 'y': 7}
>>
>> So instead they'll write
>>     __slots__ = OrderedDict({'x': 5, 'y': 7})
>> Causing the same issues?
>
> Perhaps OrderedDict should reject unordered sources. Hey, here is yet one use case!

I've maintained code that does this:

    self.headers = OrderedDict(headers)
    self.origheaders = len(headers)

… so it can later do this:

    altheaders = list(self.headers.items())[self.origheaders:]

Not a great design, but one that exists in the wild, and would be broken by OrderedDict not allowing a dict as an argument.

Also, this wouldn't allow creating an OrderedDict from an empty dict (which seems far less stupid, but I didn't lead with it because I can't remember seeing it in real code).

_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/


--
--Guido (mobile)

_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/




--
--Guido van Rossum (python.org/~guido)