我有以下代碼,它使用更小的列表(cmd.cmd_list)中的新值更新列表(rsp.rsp_list)中的值。我怎樣才能以更pythonic的方式做以下事情?之間的內存和執行時間使用另一個值更新列表中的值
for i in rsp.rsp_list:
for j in cmd.cmd_list.data:
if i.common.id == j.id:
i.common.value.CopyFrom(j.val)
我有以下代碼,它使用更小的列表(cmd.cmd_list)中的新值更新列表(rsp.rsp_list)中的值。我怎樣才能以更pythonic的方式做以下事情?之間的內存和執行時間使用另一個值更新列表中的值
for i in rsp.rsp_list:
for j in cmd.cmd_list.data:
if i.common.id == j.id:
i.common.value.CopyFrom(j.val)
典型tradeof:
cmd_data = {cmd.id: cmd.value for cmd in cmd.cmd_list}
for rsp in rsp.rsp_list:
if rsp.common.id in cmd_data:
rsp.common.value.CopyFrom(cmd_data[rsp.common.id])
兩條評論:1)如果'cmd_data'中不存在'rsp.common.id',將會引發'KeyError'。你可能應該在cmd_data:'中使用rsp.common.id。 2)創建字典時不需要使用列表理解,如果省略方括號,它將成爲生成器表達式,並具有相同的結果。 –
完全同意你的意見,將更新片段。 – vacehcto
嘗試除了會加快執行時間。 – SuperBiasedMan
什麼類型的具有i和j? – wanderlust
你可以找到像這樣的類似的項目: 爲我在設置(一).intersection(二):打印我 –
你可以重新定義'rsp.rsp_list'和'cmd.cmd_list.data'作爲字典嗎? –