[英]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取决于三个条件:
对 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.