簡體   English   中英

為什么同樣的表達式在作為一行輸入到 python 解釋器時返回 True,而在腳本中運行時返回 False?

[英]Why does this same expression return True in when entered as a line into the python interpreter and False when run in a script?

我有一個 python 腳本,我在其中打印了兩個變量的值。 這些是破折號回調 id。 摘錄如下:

ctx = dash.callback_context
changed_id = [p['prop_id'] for p in ctx.triggered][0]
order_id = changed_id.split('.')[0]


print(child['props']['id'])
print(order_id)
print(child['props']['id'] ==order_id)

output 是:

{'type': 'dynamic-order', 'index': 3}
{"index":3,"type":"dynamic-order"}
False

但是當我復制並通過前兩行的 output 並將它們直接運行到 python3 解釋器中時,我得到:

>>> {'type': 'dynamic-order', 'index': 3}=={"index":3,"type":"dynamic-order"}
True

我希望這些都應該返回相同的 boolean 值。 這些值有何不同? 此外,為什么我在腳本中得到 False 以及如何更改它以使其評估為 True?

看起來order_id實際上是一個字符串。 如果它是一個字典,Python 將在那里使用單引號而不是雙引號,並在冒號:和逗號之后放置空格,

它似乎包含 JSON,所以使用json模塊來解析它。

import json

order_id = '{"index":3,"type":"dynamic-order"}'
d = {'type': 'dynamic-order', 'index': 3}
print(json.loads(order_id) == d)  # -> True

將來,您可以使用repr()pprint.pprint()來診斷此類問題。

print(repr(order_id))  # -> '{"index":3,"type":"dynamic-order"}'
print(repr(d))         # -> {'type': 'dynamic-order', 'index': 3}
from pprint import pprint

pprint(order_id)             # -> '{"index":3,"type":"dynamic-order"}'
pprint(d)                    # -> {'index': 3, 'type': 'dynamic-order'}
pprint(d, sort_dicts=False)  # -> {'type': 'dynamic-order', 'index': 3}

(注意pprint.pprint()默認情況下對字典鍵進行排序,從 Python 3.7 開始就不太有用了。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM