python - 嵌套'for'循环覆盖数据
问题描述
COMMON_CASES = {'OSX Catalina - Latest Chrome': {'acceptSslCerts': 'true',
'browser': 'Chrome',
'browser_version': '81.0 beta',
'browserstack.debug': 'true',
'browserstack.local': 'true',
'browserstack.networkLogs': 'true',
'os': 'OS X',
'os_version': 'Catalina',
'resolution': '1280x1024'},
'OSX Catalina - Latest Edge': {'acceptSslCerts': 'true',
'browser': 'Edge',
'browser_version': '81.0 beta',
'browserstack.debug': 'true',
'browserstack.local': 'true',
'browserstack.networkLogs': 'true',
'os': 'OS X',
'os_version': 'Catalina',
'resolution': '1280x1024'},
'OSX Catalina Latest Safari': {'acceptSslCerts': 'true',
'browser': 'Safari',
'browser_version': '13',
'browserstack.debug': 'true',
'browserstack.local': 'true',
'browserstack.networkLogs': 'true',
'os': 'OS X',
'os_version': 'Catalina',
'resolution': '1280x1024'}}
LOGIN_SUCCESS = {'Login Success Customer': ('vedran@fishing.vedran', 'vedran123'), 'Login Success Captain': ('vedran@fishing.vedran', 'vedran123'), 'Login Success Admin': ('vedran@fishing.vedran', 'vedran123')}
caps = []
for case_index, (test_name, test_data) in enumerate(LOGIN_SUCCESS.items()):
for test_index, (case_name, device_data) in enumerate(COMMON_CASES.items()):
# case_s = f'{case_name} / {test_name}'
device_data['name'] = test_name
caps.append(test_data + (device_data,))
print(caps)
我有两个变量需要使用两个 for 循环合并,因为我需要使用两个数组中的键为测试用例建立一个名称。我在两个字典中有 3 个项目,所以我需要在最终列表中有 9 个项目,这应该是一个元组列表。
现在,当我运行它时,我希望该列表将包含每个登录案例中的 3 个,登录成功客户、登录成功队长和登录成功管理员 但是,如果您运行我提供的代码,您将看到“名称' 在字典中始终是Login Success Admin。那个怎么样?当我在函数内打印代码时,一切都是正确的,但是当我附加到列表时,它会以某种方式发生变化。嵌套循环在 Python 中的工作方式是否不同?
解决方案
复制您需要的数据并使用它
caps = []
for case_index, (test_name, test_data) in enumerate(LOGIN_SUCCESS.items()):
for test_index, (case_name, device_data) in enumerate(COMMON_CASES.items()):
data = device_data.copy()
data['name'] = test_name
caps.append(test_data + (data,))
正如 jonrsharpe 在他的评论中提到的那样,您引用的是同一本词典。当您将字典分配给新变量时,Python 不会隐式复制字典。它们指向相同的内存位置。
推荐阅读
- c# - MVC 根据另一个表的 id 创建一个列表视图
- r - 使用自定义评估方案评估 Moodle 中的考试
- ruby-on-rails - left_join 同一张表两次
- python - 如何使用 cqlengine 在 Cassandra 中定义冻结列?
- docker - 如何将位置映射到 Nginx 中的上游服务器?
- excel - 币安API接口 - Excel VBA
- python - flask-admin + wtforms:TypeError:populate_obj:找不到从提供的obj或输入数据/默认值填充的值
- git - 如何git只添加一次文件
- python - 识别模板图像中的矩形
- javascript - 为什么我的 img 中的 require() 在与 Bulma 一起使用时不能正常工作?