我对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)
一旦计算出两个值之间的差,就将它们存储在另一个可以通过键/值访问的字典中。
答案 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
,以使它是dict
从str
到float
。这要求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
的函数,并且(我认为)可以执行您所要求的。它可以直接与迭代器一起使用,不需要中间的list
或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))
答案 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}