在已排序的字典中成对地减去两个值

Subtract values in pairs of two in a sorted dictionary

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

填充字典后,我想成对地减去字典中的值,即第 2 项的值减去第一项的值,第 4 项的值减去第 3 项的值,最后一项减去最后一项的值在字典中减去我们第 5 项的值。

完成后,我打印出结果。

我的词典示例:

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

我一直在 python 中查看字典理解,for 带有嵌套 if 的循环(不理想)但无法弄清楚这一点。任何允许我访问字典中值索引的不同方式(更有效)的指针?

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

计算出值之间的差异后,我会将它们存储在另一个字典中,我可以通过 key/value 访问该字典。

好的,我先将它们分成两对,然后为每一对计算新值,并输入 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)


我已经将你的 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,
}

Next process() 是一个采用 data 并且(我认为)执行您所要求的功能。它直接与迭代器一起工作,不需要中间 lists 或 dicts(但是,由于 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))

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

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}