在已排序的字典中成对地减去两个值
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
更改为 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,
}
Next process()
是一个采用 data
并且(我认为)执行您所要求的功能。它直接与迭代器一起工作,不需要中间 list
s 或 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}
我对 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
更改为 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,
}
Next process()
是一个采用 data
并且(我认为)执行您所要求的功能。它直接与迭代器一起工作,不需要中间 list
s 或 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}