【问题标题】:Python 3.4.1 Find different keep the samePython 3.4.1 找不同保持不变
【发布时间】:2014-08-26 19:37:19
【问题描述】:

我无法正确评估一组数据。我有一组带有编号键的 JSON 数据。我的目标是评估所有值并随着时间的推移将它们递增到相同的值。

示例:
py 脚本每小时运行一次。

(1) 查看 JSON 数据:

{
"1": 100,
"10": 75,
"2": 100,
"3": 100,
"4": 100,
"5": 100,
"6": 100,
"7": 100,
"8": 100,
"9": 100
}

(2) 确定键“10”不等于其余键。
(3) Increment Key #10's value +1 to 76

这个过程应该每小时重复一次。 当评估发现所有值都相等时,应将 Key #1 的值增加 +1 到 101。 在下一次运行时,它应该将 Key #2 增加 +1,以此类推,直到它们再次相等。

我已经可以使用 JSON 数据打印出来,选择某些值,更新等。我的麻烦是试图弄清楚如何正确评估数据。什么样的 if then、while 等循环或者我应该做什么来实现我的目标。

【问题讨论】:

  • 如果多个值“较低”会怎样?
  • 另外,您对这个数据结构的了解程度如何?任何算法都必须从对键进行排序和迭代开始,因此您不妨将其设为 list
  • 我想把它变成一个列表,但它是一个 API 系统,所以我以 JSON 格式获得响应,并且必须以 JSON 格式回复更新。我可以把它变成一个列表,其中的值按键值的顺序输入吗?所以我会知道哪个条目是哪个?

标签: python json python-3.x


【解决方案1】:

您基本上是在找到第一个 的值比前面的元素:

import json

data = json.loads(json_string)

first = data['1']
for key in sorted(data):
    if data[key] < first:
        data[key] += 1
        break
else:
    data['1'] += 1

json_string = json.dumps(data)

这将增加遇到的第一个低于与data['1'] 关联的值的值。如果没有这样的值,data['1'] 会改为递增。

请注意,您也可以将其设为 JSON list

json_string = "[100, 100, 100, 100, 100, 100, 100, 100, 100, 75]"

代码变成:

first = data[0]
for i, val in enumerate(data[1:]):
    if val < first:
        data[i] += 1
        break
else:
    data[0] += 1

【讨论】:

  • 数据通过 API 以 JSON 形式提供给我。我可以把它变成一个列表,其中的值按键值的顺序输入吗?所以我会知道哪个条目是哪个?然后根据列表中的位置,我可以通过 API 更新密钥吗?这也很有帮助,因为与其键值相比,元素的 JSON 似乎总是乱序的。
  • @QOps1981:这并不重要; sorted() 函数负责按顺序处理键。先转换为列表然后再转换回字典不会给您带来太多好处。
【解决方案2】:
data ={
"1": 100,
"10": 75,
"2": 100,
"3": 100,
"4": 100,
"5": 100,
"6": 100,
"7": 100,
"8": 100,
"9": 100
}  



import time
n = 1
while True:
    if data["10"] < data["9"]: # if 9 is greater we need to increase 10, reset n
        data["10"] += 1
        n = 1
        time.sleep(3600) # sleep for an hour
    else:
        data[str(n)] += 1
        time.sleep(3600)
        n += 1
        continue

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    相关资源
    最近更新 更多