python - 附加一个 python 列表会覆盖另一个
问题描述
更新:我简化了示例并添加了预期结果
我犯了一个错误,无法弄清楚。
当我运行它时,我的期望是initial_payload
将包含来自的第一组 ['users'] users_to_survey
,因为我在覆盖之前附加它们,然后当我覆盖 product_payload['users'] 时,reminder_payload
将包含 [ '用户'] 来自users_to_remind
.
但是当我在最后打印initial_payload
时,它与reminder_payload
. 两者的 ['users'] 相同
initial_payload = []
reminder_payload = []
product_payload = {
'product': 'colgate',
}
users_to_survey = ['kevin', 'dan']
if users_to_survey:
product_payload['users'] = users_to_survey
initial_payload.append(product_payload)
users_to_remind = ['bill', 'tom']
if users_to_remind:
product_payload['users'] = users_to_remind
reminder_payload.append(product_payload)
print(initial_payload)
print(reminder_payload)
我确定我缺少一些基本的东西。
解决方案
真的不确定你想要完成什么,但我可以告诉你为什么你会看到你所看到的。由于您创建了一个名为 product_payload 的字典,如果您当前的产品有要调查的用户和要提醒的用户,那么您将在写出时覆盖对象引用。
创建两个product_payloads,每个用户调查和用户提醒。尝试这个
initial_payload = []
reminder_payload = []
product_payload_survey = {
'product': 'colgate',
}
product_payload_remind = {
'product': 'colgate',
}
users_to_survey = ['kevin', 'dan']
if users_to_survey:
product_payload_survey['users'] = users_to_survey
initial_payload.append(product_payload_survey)
users_to_remind = ['bill', 'tom']
if users_to_remind:
product_payload_remind['users'] = users_to_remind
reminder_payload.append(product_payload_remind)
print(initial_payload)
print(reminder_payload)
尝试运行下面的代码片段以了解我正在谈论的错误。
class product:
def __init__(self):
self.get_users_to_survey = [1,2,3]
self.get_users_to_remind = [4,5]
BATCH_SIZE = 3
products = [product()]
initial_payload = []
reminder_payload = []
for product in products:
product_payload = {
'product': product,
}
users_to_survey = product.get_users_to_survey
if users_to_survey:
product_payload['users'] = users_to_survey[:BATCH_SIZE]
product_payload['type'] = 'initial'
initial_payload.append(product_payload)
print(initial_payload)
users_to_remind = product.get_users_to_remind
if users_to_remind:
product_payload['users'] = users_to_remind[:BATCH_SIZE]
product_payload['type'] = 'reminder'
reminder_payload.append(product_payload)
print(initial_payload)
推荐阅读
- python-3.x - 无法使用 python pypsexec 库在远程机器上使用 powershell 命令替换文本文件中的单词
- android - 执行任务:项目中的 [:app:generateDebugSources]
- java - 使用 ffmpeg 录制屏幕在 tomcat 服务器中不起作用(找不到流 0 的编解码器参数)
- python - 在 PyTorch 中屏蔽 3D 张量中的前 k 个元素(每行不同的 k)
- python - 为什么张量没有连接到 TensorBoard 中的梯度?
- android - 第二次获取数据会使我的 long 变量增加 1,导致无法多次重新加载数据
- sql - 比较周日和上周日
- javascript - 用于 React 的 Azure AD B2C 库
- android - 如何在颤动中使用动态列表制作表单
- hibernate - 在 Spring Data JPA 存储库中启用 JPA 二级缓存