gpt4 book ai didi

python - 检查赋值是否更改目标对象的最 Pythonic 方法

转载 作者:行者123 更新时间:2023-12-01 07:17:38 24 4
gpt4 key购买 nike

我需要比较 2 个字典并使它们相等(分配 a -> b)。我还需要知道是否有任何值发生变化,如果是的话,我需要运行一个计算成本高昂的函数。我想出了一些可行的代码,但它看起来根本不是Pythonic。

有没有更Pythonic的方式?

   def sync_data(activity_update_response, existing_quote):
data_changed = False
if activity_update_response["source"]["firstName"] != existing_quote["origin"]["applicant"]["firstName"]:
activity_update_response["source"]["firstName"] = existing_quote["origin"]["applicant"]["firstName"]
data_changed = True

if activity_update_response["source"]["lastName"] != existing_quote["origin"]["applicant"]["surname"]:
activity_update_response["source"]["lastName"] = existing_quote["origin"]["applicant"]["surname"]
data_changed = True

# ( ... )
# repeat for 4 more fields

if data_changed:
# this is slow
recalculate_hashes(activity_update_response)

最佳答案

收集要更新的 key ,然后更新字典并重新计算哈希值。 Python 3.8 中新的赋值表达式运算符派上了用场。

def sync_data(activity_update_response, existing_quote):
# XXX Pick good names
a = activity_update_response["source"]
e = existing_quote["origin"]["applicant"]
fields = ["lastName", "firstName", ...]

#if (keys_to_update := [x for x in fields if a[x] != e[x]]):
keys_to_update = [x for x in fields if a[x] != e[x]]
if keys_to_update:
recalculate_hashes(activity_update_response)
for key in keys_to_update:
a[key] = e[key]

关于python - 检查赋值是否更改目标对象的最 Pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57871606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com