2017-03-03 51 views
3

字典項目的順序是否可靠創建時創建時字典項目的順序是否可靠**?

注意:這是不是重複所有的問題,人們預計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) 

回答

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 
+0

謝謝。那是我用Google搜索找不到的。我會在5分鐘內接受你的回答,當它也允許我。你擊敗了蜂鳴器。 –