在排序的字典中将值成对减两个

时间:2019-06-23 14:55:25

标签: python python-3.x loops dictionary subtraction

我对Python还是很陌生,并且正在尝试使我手动执行的操作自动化。我有一个由6个项目组成的排序字典。字典的大小将始终包含6个项目,其中键是字符串,值是浮点数。

一旦我填充了字典,我想成对地从字典中减去值,即第二项的值减去第一项的值,第四项的值减去第三项的值,最后是我们最后一项的值字典从第5个项目中减去该值。

完成后,我打印出结果。

我的字典示例:

my_dict = {}
my_dict = {'item1': '18.6798', 'item2': '12.638', 'item3': '20', \
     'item4': '60.00', 'item5': '65.7668', 'item6': '45.7668'}

我一直在通过python中的字典理解来寻找带有嵌套ifs(不理想)的循环,但是很难弄清楚这一点。是否有任何以不同方式(更有效)的指针可以让我访问字典中某个值的索引?

    remainder = {}
        for key, value in sorted(my_dict.items()):
        ...
    print(remainder)

一旦计算出两个值之间的差,就将它们存储在另一个可以通过键/值访问的字典中。

3 个答案:

答案 0 :(得分:1)

好的,我首先将它们分成几对,然后为每对计算新值,然后放入remainder

my_dict = {'item1': 18.6798, 'item2': 12.638, 'item3': 20, \
     'item4': 60.00, 'item5': 65.7668, 'item6': 45.7668}

items = list(sorted(my_dict.keys()))
pairs = [items[i:i + 2] for i in range(0, len(items), 2)]

remainder = {}
for item1, item2 in pairs:
    remainder[item1] = my_dict[item1] - my_dict[item2]

print(remainder)


答案 1 :(得分:1)

我已将您更改为data,以使它是dictstrfloat。这要求Python 3.7>已订购dict

data = {
    'item1': 18.6798,
    'item2': 12.638,
    'item3': 20.0,
    'item4': 60.00,
    'item5': 65.7668,
    'item6': 45.7668,
}

下一个process()是一个接受data的函数,并且(我认为)可以执行您所要求的。它可以直接与迭代器一起使用,不需要中间的listdicts(但是,由于data很小,因此这并不是问题)

def process(data):
    items = iter(data.items())
    result = {}
    while True:
        try:
            key_1, value_1 = next(items)
        except StopIteration:
            break
        _, value_2 = next(items)
        result[key_1] = value_1 - value_2
    return result


print(process(data))

答案 2 :(得分:1)

您可以压缩iter制成的dict.items(),然后在简单的字典理解中使用。如果您有奇数个键,由于没有什么可减去的,因此它将忽略最后一个:

my_dict = {'item1': '18.6798', 'item2': '12.638', 'item3': '20','item4': '60.00', 'item5': '65.7668', 'item6': '45.7668'}

f = iter(sorted(my_dict.items()))
{k1:float(v1) - float(v2) for ((k1, v1), (k2, v2)) in zip(f,f)}

结果:

{'item1': 6.0418, 'item3': -40.0, 'item5': 20.0}