【问题标题】:adding dictionary data into a tupple in a python for loop在python for循环中将字典数据添加到元组中
【发布时间】:2020-04-07 19:28:53
【问题描述】:

我正在为此苦苦挣扎,这是使用元组和字典的全新方式。我正在从我的模型中提取数据,我想得到一个看起来像这样的数组组合;

{'Home': {'completed': '2', 'ongoing': '3'}, 'Lenan School': {'completed': '1', 'ongoing': '0'}, 'test site': {'completed': '1', 'ongoing': '3'}, 'Juala': {'completed': '0', 'ongoing': '0'}}

我的代码是这样的;

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 一直被最后一个值覆盖。我的打印输出是这样的;

------
{'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'}}

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

【问题讨论】:

    标签: python dictionary django-models tuples


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢 shx2,这简直是我想不到的,我们需要为循环的每个实例创建一个新对象。感谢您的帮助
    【解决方案2】:

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

    您应该在每次迭代中复制“combinded_array”:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      • 2016-09-16
      • 2012-06-16
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多