计算多个(最多到n或未知)字典的值总和

2024-09-27 00:15:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典如下:

dict_items([(True, 1), (None, 16)])
dict_items([(True, 3), (None, 15)])

随着用户数量的增加,这个数字也会增加,也就是说它可能会上升到n,所以我想找出真的和无的总数。你知道吗

对于以上数据,我想找到total\u true=4,total\u none=31

    care_needs_name = {
        "Communication": None,
        "Continence": None,
        "Daily life/lifestyle": None,
        "Death and dying": None,
        "Emotional support": None,
        "Finance": None,
        "Maintaining a safe environment": None,
        "Medical": None,
        "Medication": None,
        "Mental capacity": None,
        "Mobility": None,
        "Nutrition/hydration": None,
        "Personal care": None,
        "Religious/cultural/spiritual needs": None,
        "Sexuality": None,
        "Skin integrity": None,
        "Sleeping": None
    }



    care_plans = CarePlanNeed.objects.filter(resident=obj.resident)
    today = timezone.now()
    i = 0
    # sum = 0
    for care in care_plans:
        i += 1
        recent = care.history.first()
        next_review = recent.history_date + datetime.timedelta(30)
        if str(today) > str(next_review):
            care_needs_name[care.aspect_of_life] = next_review.replace(hour=0, minute=0, second=0, microsecond=0)
        else:
            care_needs_name[care.aspect_of_life] = True
    counts = dict(Counter(care_needs_name.values()).items())
    print(counts.items())
    total_review_completed = 0
    total_review_to_add = 0
    for k, v in counts.items():
        if k == True:
            total_review_completed = total_review_completed + v
        else:
            total_review_to_add = total_review_to_add + v
    print(total_review_completed)

但我得到的是:

dict_items([(True, 1), (None, 16)])
1
dict_items([(True, 3), (None, 15)])
3

编辑2:

我有这个查询集<QuerySet [<CarePlanNeed: Communication( gbsd adcafv (12 Nov 2019))>]> <QuerySet [<CarePlanNeed: ads( asd asd (05 Nov 2019))>, <CarePlanNeed: Communication( asd asd (05 Nov 2019))>, <CarePlanNeed: Continence( asd asd (05 Nov 2019))>]>

现在我想把所有的CarePlanNeed加起来,这里的sum=4,即沟通+广告+沟通+自制


Tags: namenonetrueitemsreviewdictnovtotal
2条回答
from collections import Counter

nr = int(input("Number of dictionaries: "))
dicts = []
for i in range(nr):
    a = int(input("True value for dictionary nr %d : " %i))
    b = int(input("None value for dictionary nr %d : " %i))
    dicts.append({'True': a, 'None': b})
c = Counter()
for d in dicts:
    c.update(d)
print(c)

如果需要其他功能,可以修改第一部分。你知道吗

你可以这样做:

def func(dct_items):
    true = 0
    none = 0
    for key in range(0, len(dict_items)):
        if(dict_items[key][0] == True):
            true += dict_items[key][1]
        elif(dict_items[key][0] == None):
            none += dict_items[key][1]
    return true, none

total_true = 0
total_none = 0

dict_items = ([(True, 1), (None, 16)])
temp_true, temp_none = func(dict_items)
total_true += temp_true
total_none += temp_none

dict_items= ([(True, 3), (None, 15)])
temp_true, temp_none = func(dict_items)
total_true += temp_true
total_none += temp_none

print("Total True: " + str(total_true) + '\n')
print("Total None: " + str(total_none))

这将为您提供:

Total True: 4

Total None: 31

相关问题 更多 >

    热门问题