首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字典数据添加到python for循环中的元组中

将字典数据添加到python for循环中的元组中
EN

Stack Overflow用户
提问于 2020-04-07 19:20:30
回答 2查看 26关注 0票数 0

我正在努力解决这个问题,这对元组和字典来说是一个全新的工作。我正在从我的模型中提取数据,我想得到一个看起来像这样的数组组合;

代码语言:javascript
复制
{'Home': {'completed': '2', 'ongoing': '3'}, 'Lenan School': {'completed': '1', 'ongoing': '0'}, 'test site': {'completed': '1', 'ongoing': '3'}, 'Juala': {'completed': '0', 'ongoing': '0'}}

我的代码看起来像这样;

代码语言:javascript
复制
qua_sites = quarantine_sites.objects.all().order_by('site_name')
ongoing_cases = {}
completed_cases = []
combinded_array = myDict()
for qua_site in qua_sites:
    qua_completed_contacts = quarantine_contacts.objects.filter(quarantine_site_id = qua_site.id).filter(created_at__gte = date.today()- timedelta(days=14)).count()
    qua_ongoing_contacts = quarantine_contacts.objects.filter(quarantine_site_id = qua_site.id).filter(created_at__lte = date.today()- timedelta(days=14)).count()

    combinded_array.add('ongoing',str(qua_ongoing_contacts))
    combinded_array.add('completed',str(qua_completed_contacts))
    print("------")
    print(combinded_array)

    ongoing_cases[qua_site.site_name] = combinded_array
    print(ongoing_cases)

combined_array会一直被最后一个值覆盖。我的打印输出是这样的;

代码语言:javascript
复制
------
{'completed': '2', 'ongoing': '3'}
{'Home': {'completed': '2', 'ongoing': '3'}}
------
{'completed': '1', 'ongoing': '0'}
{'Home': {'completed': '1', 'ongoing': '0'}, 'Juala': {'completed': '1', 'ongoing': '0'}}
------
{'completed': '1', 'ongoing': '3'}
{'Home': {'completed': '1', 'ongoing': '3'}, 'Lenan School': {'completed': '1', 'ongoing': '3'}, 
'Juala': {'completed': '1', 'ongoing': '3'}}
------
{'completed': '0', 'ongoing': '0'}
{'Home': {'completed': '0', 'ongoing': '0'}, 'Lenan School': {'completed': '0', 'ongoing': '0'}, 
'test site': {'completed': '0', 'ongoing': '0'}, 'Juala': {'completed': '0', 'ongoing': '0'}}

如何实现我想要的数组组合,如上面的示例。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-07 19:27:49

问题是您只有一个myDict对象,并且您不断地向ongoing_cases添加对同一对象的引用,然后更改它。这将有效地更改ongoing_cases中所有条目的值(因为它们引用相同的对象)。

要解决此问题,请在循环内创建一个新对象(combinded_array = myDict())。

票数 1
EN

Stack Overflow用户

发布于 2020-04-07 19:28:54

Python中的列表是通过引用传递的,所以“ongoing_cases”中的所有项都引用同一个list实例,这就是值被覆盖的原因。

您应该在每次迭代中创建一个'combinded_array‘的副本:

代码语言:javascript
复制
    ongoing_cases[qua_site.site_name] = combinded_array.copy()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61078836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档