Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在for循环迭代期间对不同键的值执行算术/比较_Python_Python 3.x_Dictionary_Nested - Fatal编程技术网

Python 在for循环迭代期间对不同键的值执行算术/比较

Python 在for循环迭代期间对不同键的值执行算术/比较,python,python-3.x,dictionary,nested,Python,Python 3.x,Dictionary,Nested,我有一本有数百把钥匙的字典。如何运行for循环并对不同的键/值对执行比较/算术运算 以下是该词典的一个小示例: dict = { "001": { "d": "7179.6201", "f": "7183.6201", }, "002": { "d": "7112.0200", "f": "7166.0000", }, "

我有一本有数百把钥匙的字典。如何运行for循环并对不同的键/值对执行比较/算术运算

以下是该词典的一个小示例:

dict = {
        "001": {
            "d": "7179.6201",
            "f": "7183.6201",
        },
        "002": {
            "d": "7112.0200",
            "f": "7166.0000",
        },
        "003": {
            "d": "7255.0000",
            "f": "7128.5400",
        },
        "004": (
            "d": "7250.0000",
            "f": "7128.2000"
        }
    }
"001": "7179.6201", diff: "67.6001"
"003": "7255.0000", diff: "5.0000"
for循环应该循环遍历每个键/值对,并执行两个操作。(1) 如果“001”(或任何键)的“d”值大于“002”(或任何键+1)的“d”值,则返回键(“001”,用于此特定迭代)及其相应的“d”值。(2) 如果该“d”值大于下面的“d”值,则减去两个数字(从字符串转换为数字)并返回差值

在此特定词典上运行代码的预期结果:

dict = {
        "001": {
            "d": "7179.6201",
            "f": "7183.6201",
        },
        "002": {
            "d": "7112.0200",
            "f": "7166.0000",
        },
        "003": {
            "d": "7255.0000",
            "f": "7128.5400",
        },
        "004": (
            "d": "7250.0000",
            "f": "7128.2000"
        }
    }
"001": "7179.6201", diff: "67.6001"
"003": "7255.0000", diff: "5.0000"
我知道如何调用这些键/值对,但我甚至不知道如何开始比较不同键的值,尤其是当我无法显式引用键本身时。我想为我所做的工作提供代码,但我甚至不知道从哪里开始这样的工作


谢谢

如果您的键遵循该顺序,则可以从当前键中获取下一个键

for key in data:
    next_key = "{:03d}".format(int(key) + 1)
    try:
        current_d, next_d = data[key]['d'], data[next_key]['d']
    except KeyError:
        print('End of data')
    else:
        d_diff = float(current_d) - float(next_d)
        if d_diff > 0:
            print('{}: {}, diff: {}'.format(key, current_d, d_diff))
说明:

首先确保字典使用collections.OrderedDict()具有序列顺序

使用for循环迭代到最后一个元素:

for index in range(len(dict1) - 1):
使用if语句比较当前索引和下一个索引的“d”值:

if float(list(dict1.items())[index][1]['d']) > float(list(dict1.items())[index + 1][1]['d']):
如果为真,则打印所需的格式,并添加差异

print(list(dict1.items())[index][0] + ':' + list(dict1.items())[index][1]['d'] + "    diff:" + \
      str(float(list(dict1.items())[index][1]['d']) - float(list(dict1.items())[index+1][1]['d'])))

注意:这在我的机器上用python==3.6进行了测试,得到了您想要的输出

所有的按键都是3位数的吗?到目前为止你试过什么?@RamkishoreM-不幸的是,没有。我试过你提到的使用“按键+1”的方法,但按键不是顺序的。他们也跳过;例如“001”,然后是“003”,然后是“006”,等等。在我尝试过的所有for循环中,我都可以引用“d”值,但我一直在引用下一个循环迭代的“d”值。对于k,v在dict.items()中:print(v[“d”])print(k+1[v][“d”])它们还会按数字顺序排列吗?当在范围上循环时,你可以得到两个键
data.keys()[i],data.keys()[i+1]
,在将来,请不要回答像这样的懒惰问题,因为OP没有表现出任何真正的努力。所以,这不是一个免费的编码服务。@MadPhysicast-哇,无论我去哪里,我都会发现恶霸。我觉得这个问题写得很得体,也很清楚——不是懒洋洋的。然而,在解决问题时所感觉到的努力可以被认为是“懒惰”。不管怎样,因为你是一个相对高调的用户,所以我认为你应该创造一个更友好的氛围。与其贬低问题,侮辱我,不如你更热情一点,礼貌地告诉我正确的SO习俗。我非常乐意参与并分享我的尝试(但不是与你分享)。@Aaron如果你需要任何解释,你可以问我。我会更新我的解释谢谢!这是我错过的列表转换,也是我不断遇到索引问题的原因。下一次,我一定会发布我的作品;也许这会为你们节省一些时间来帮助我:)