字典项目的顺序在创建时是否可靠**?

时间:2017-03-03 05:57:41

标签: python dictionary

字典项目的顺序是否可靠创建时

注意:人们希望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)

fh对象上的所有这些方法按照列出的顺序调用非常重要。在稍后阅读时,我不关心字典的顺序。

我可以依赖列出的顺序调用这4个函数吗?

我在下面创建了一个测试,它给了我轶事证据,我可以。但是,我甚至无法得到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)

1 个答案:

答案 0 :(得分:5)

是的,Python从左到右评估表达式:

来自docs

  

Python从左到右评估表达式。请注意,虽然   评估一项任务,在评估之前对右侧进行评估   左手边。

     

在以下几行中,将对表达式进行求值   后缀的算术顺序:

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