字典项目的顺序在创建时是否可靠?
注意:这不是所有人们希望dict表现为行为的问题的重复OrderedDict.
我想要做的是将json字典传递给AWS Lambda函数.该字典的大部分内容都来自open文件处理程序.它是这样的:
params = {
"FunctionName": "log_load",
"Payload": json.dumps({
"header": fh.readline(),
"start": fh.tell(),
"data": fh.read(),
"end": fh.tell()})}
result = lambda_client.invoke(**params)
Run Code Online (Sandbox Code Playgroud)
重要的是,按照列出的顺序调用fh对象上的所有这些方法.在稍后阅读时我不关心字典的顺序.
我在下面创建了一个测试,它给了我可以证明的轶事证据.但是,我甚至无法得到pprint不按顺序显示字典的情况.所以,我对键与值匹配并不感到惊讶.
from pprint import pprint
r = range(100)
i = r.__iter__()
d = {
0: i.__next__(),
1: i.__next__(),
2: i.__next__(),
3: i.__next__(),
4: i.__next__(),
5: i.__next__(),
6: i.__next__(),
7: i.__next__(),
8: i.__next__(),
9: i.__next__(),
10: i.__next__(),
11: i.__next__(),
12: i.__next__(),
13: i.__next__(),
14: i.__next__(),
15: i.__next__(),
16: i.__next__(),
17: i.__next__(),
18: i.__next__(),
19: i.__next__(),
20: i.__next__(),
21: i.__next__(),
22: i.__next__(),
23: i.__next__(),
24: i.__next__(),
25: i.__next__(),
26: i.__next__(),
27: i.__next__(),
28: i.__next__(),
29: i.__next__(),
30: i.__next__(),
31: i.__next__(),
32: i.__next__(),
33: i.__next__(),
34: i.__next__(),
35: i.__next__(),
36: i.__next__(),
37: i.__next__(),
38: i.__next__(),
39: i.__next__(),
40: i.__next__(),
41: i.__next__(),
42: i.__next__(),
43: i.__next__(),
44: i.__next__(),
45: i.__next__(),
46: i.__next__(),
47: i.__next__(),
48: i.__next__(),
49: i.__next__(),
50: i.__next__(),
51: i.__next__(),
52: i.__next__(),
53: i.__next__(),
54: i.__next__(),
55: i.__next__(),
56: i.__next__(),
57: i.__next__(),
58: i.__next__(),
59: i.__next__(),
60: i.__next__(),
61: i.__next__(),
62: i.__next__(),
63: i.__next__(),
64: i.__next__(),
65: i.__next__(),
66: i.__next__(),
67: i.__next__(),
68: i.__next__(),
69: i.__next__(),
70: i.__next__(),
71: i.__next__(),
72: i.__next__(),
73: i.__next__(),
74: i.__next__(),
75: i.__next__(),
76: i.__next__(),
77: i.__next__(),
78: i.__next__(),
79: i.__next__(),
80: i.__next__(),
81: i.__next__(),
82: i.__next__(),
83: i.__next__(),
84: i.__next__(),
85: i.__next__(),
86: i.__next__(),
87: i.__next__(),
88: i.__next__(),
89: i.__next__(),
90: i.__next__(),
91: i.__next__(),
92: i.__next__(),
93: i.__next__(),
94: i.__next__(),
95: i.__next__(),
96: i.__next__(),
97: i.__next__(),
98: i.__next__(),
99: i.__next__()}
pprint(d, width=-1, indent=4)
Run Code Online (Sandbox Code Playgroud)
是的,Python从左到右评估表达式:
来自文档:
Python从左到右评估表达式.请注意,在评估分配时,右侧在左侧之前进行评估.
在以下行中,表达式将按其后缀的算术顺序进行计算:
Run Code Online (Sandbox Code Playgroud)expr1, expr2, expr3, expr4 (expr1, expr2, expr3, expr4) {expr1: expr2, expr3: expr4} expr1 + expr2 * (expr3 - expr4) expr1(expr2, expr3, *expr4, **expr5) expr3, expr4 = expr1, expr2