繁体   English   中英

如何更新字典列表中的值

[英]How to update a value on a dictionary list

我在 python 中有一个字典列表,其中包含一些键,值如下:

for i in range(1,11):

users.append([ {"id":i, "role":"receiver", "position":i, "personality": "truthful", "number_of_park_reports": 0, "number_of_availability_reports": 0, "number_of_fake_availability_reports": 0, "num_of_usage":0, "points":0, "n":0, "l":0}])

在某些情况下我想在number_of_park_reports添加 +1 后,我在女巫中有一个循环:

for lp in range(1000):
prob=random.uniform(0, 1)
print(prob)    
for x in p_spaces:

    if(x[0]['state']=="free/free" ):
        usert=random.choices(users)
    
        if usert[0][0]["role"] == "receiver":
            
            if usert[0][0]["personality"]=="truthful":
            
                        
                if (prob<=0.3):           
                    x[0]["state"]="occ/occ"
                    x[0]["receiver"]=usert[0][0]["id"]
                    usert[0][0]["role"]="receiver"
                    usert[0][0]["number_of_park_reports"]=usert[0][0]["number_of_park_reports"]+1

for user in users:
    print[0]["number_of_park_reports"]

在循环结束时,我得到值 1 作为每个用户的公园报告数,但我想获得每个用户在每个循环中获得的总数number_of_park_reports

我了解您想知道如何更新字典中的值。 这很容易做到。

首先你有一个这样的字典: my_dict = {"number_of_park_reports": 0}

要更新number_of_park_reports ,请将新值分配给如下变量update_my_dict = {"number_of_park_reports": my_dict.get("number_of_park_reports") + 1} 这会将您的变量update_my_dict设置为新值,方法是获取旧值并向其添加1

然后实际更新number_of_park_report您使用字典 function update() ,例如my_dict.update(update_my_dict)

这使得"number_of_park_report": 1当您打印my_dict时。

希望对您有所帮助!

下面程序的output取决于三个条件:

  1. 列表 p_spaces 的长度
  2. function random.uniform 的返回值
  3. function random.choices的返回值

对 p_spaces 中的每个元素调用一次 random.choices。 每次调用 random.choice 时,增加 users 中某个元素的 number_of_park_reports 的概率都会增加。

number_of_park_reports 只能增加,如果 random.uniform 返回的值小于或等于 0.3。 多次运行程序表明在某些运行中 number_of_park_reports 在用户的任何元素中都没有增加。

number_of_park_reports 在 random.choices 返回的列表元素中增加。 如果 random.choices 始终返回相同的列表元素,则 number_of_park_reports 仅针对该元素增加。 这不太可能发生,但可能发生。

我认为在您的代码中更新“number_of_park_reports”的字典值没有任何问题。

我使用不同大小的 p_spaces 多次运行以下程序(~30 次)。 从未发生过为每个用户的公园报告数量获得 1。 因此,您可能运行的代码与我不同。 我怀疑我们程序的缩进不同。 请更正代码中的缩进,以方便复制 output。

import random


def update_value():
    p_spaces = []
    for i in range(1, 1000):
        p_spaces.append([{'state': "free/free"}])
    users = []
    for i in range(1, 11):
        users.append([{"id": i, "role": "receiver", "position": i, "personality": "truthful", "number_of_park_reports": 0,
               "number_of_availability_reports": 0, "number_of_fake_availability_reports": 0, "num_of_usage": 0,
               "points": 0, "n": 0, "l": 0}])

    for lp in range(1000):
        prob = random.uniform(0, 1)
    print("prob: " + str(prob))
    for x in p_spaces:

        if x[0]['state'] == "free/free":
            usert = random.choices(users)

            if usert[0][0]["role"] == "receiver":

                if usert[0][0]["personality"] == "truthful":

                    if prob <= 0.3:
                        x[0]["state"] = "occ/occ"
                        x[0]["receiver"] = usert[0][0]["id"]
                        usert[0][0]["role"] = "receiver"
                        usert[0][0]["number_of_park_reports"] = usert[0][0]["number_of_park_reports"] + 1

    for user in users:
        print("number_of_park_reports: " + str(user[0]["number_of_park_reports"]))


if __name__ == '__main__':
    update_value()

我建议使用调试器来更好地理解您的代码。 例如,您可以使用https://www.jetbrains.com/help/pycharm/part-1-debugging-python-code.html#start-debugger-session

最好的,迈克尔

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM