python - 使用 Python 在 JSON 文件中添加随机整数

标签 python json random key

这是我的代码:

#start.py
import json

y = {}
y['red'] = {'name': "red", 'p': 0, 'rand': 0}
y['blue'] = {'name': "blue", 'p': 0, 'rand': 0}
y['green'] = {'name': "green", 'p': 0, 'rand': 0}

with open('y.json', 'w') as f:
    json.dump(y, f)

#main.py
import json
import random

f = open('y.json')
y = json.load(f)


for key, value in y.items():
    y[key]['rand'] = random.randint(1, 101)

sorted_keys = sorted(y.keys(), key=lambda x: y[x]['rand'])

for i, key in enumerate(sorted_keys):
    y[key]['p'] = i + 1


z = '%s%s%s' % (y['red']['name'], " ", y['red']['p'])
zz = '%s%s%s' % (y['blue']['name'], " ", y['blue']['p'])
zzz = '%s%s%s' % (y['green']['name'], " ", y['green']['p'])


print('\n'.join(sorted([z, zz, zzz], key=lambda x: int(x.split()[-1]), reverse=True)))

with open('y.json', 'w') as f:
    json.dump(y, f)

我将其拆分,因此我可以首先将值引入 JSON 文件,然后在第二个文件中执行其他所有操作。

我想用这个程序做的基本上是生成一个随机数(红、蓝、绿),数字最大的人得到 3 分,第二名得到 2 分,第三名得到 1 分。

输出:

blue 3
red 2
green 1

例如,按照我想要的方式工作。

现在我的问题是,当我再次运行该程序时,我得到(例如):

red 3
blue 2
green 1

作为我的输出,而不是:

blue: 5
red: 5
green: 2

所以基本上每次我想运行程序时,我都希望“p”相加而不是再次覆盖它们。

不,我只运行一次 start.py 来设置所需的值,之后我只使用 main.py,所以我不应该用 覆盖

y = {}
y['red'] = {'name': "red", 'p': 0, 'rand': 0}
y['blue'] = {'name': "blue", 'p': 0, 'rand': 0}
y['green'] = {'name': "green", 'p': 0, 'rand': 0}

谢谢你:-)

最佳答案

对于这一行,您将 p 的值硬编码为排序索引加 1。

for i, key in enumerate(sorted_keys):
    y[key]['p'] = i + 1

相反,如果您想将本轮的分数添加到当前分数中,您应该有类似的内容

for i, key in enumerate(sorted_keys):
    y[key]['p'] += i + 1

它获取 y[key]['p'] 的当前值,并在重新分配该值之前添加 i+1

关于python - 使用 Python 在 JSON 文件中添加随机整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58939016/

相关文章:

c++ - 初始化后相同的内存地址

python - 如何获取我的元素的父元素?

python - celery - 相同的参数,多次调用

python curses 文本框小部件

python - 如何比较 Networkx 中的有向图?

javascript - 更改 JSON 数组中的值并返回更新的数组 JS

javascript - 在 json 对象中执行 javascript 代码?

javascript - 在angular js中使用ng-class分配css类

javascript 链接在点击时不起作用;页面加载时功能有效

arrays - Matlab:如何随机打乱矩阵的列