如果給出兩個字典:
valuedict = {1: 10.0, 2: 20.0, 3:30.0}
Vardict1 = {'Var1' : "1 2 3", 'Var2' : "2" , 'Var3': "1 2", 'Var4' : "3 - 2"}
如何使用基于運算式的值計算來創建新字典。
Output :- {'Var1' : 60.0, 'Var2': 20.0, 'Var3': 30.0, 'Var4': 10.0}
uj5u.com熱心網友回復:
這是使用正則運算式和字典理解的一種方法(僅適用于 /- 運算子):
import re
out = {k: sum(valuedict.get(int(b), 0)*(-1 if a=='-' else 1)
for a,b in re.findall('(?:(-)\s)?(\d )', v))
for k,v in Vardict1.items()}
輸出:
{'Var1': 60.0, 'Var2': 20.0, 'Var3': 30.0, 'Var4': 10.0}
中間步驟:
# finding the numbers and minus sign
[re.findall('(?:(-)\s)?(\d )', v) for v in Vardict1.values()]
[[('', '1'), ('', '2'), ('', '3')],
[('', '2')],
[('', '1'), ('', '2')],
[('', '3'), ('-', '2')]]
# getting the dictionary values modified if a minus sign is present
[[valuedict.get(int(b), 0)*(-1 if a=='-' else 1)
for a,b in re.findall('(?:(-)\s)?(\d )', v)]
for v in Vardict1.values()]
[[10.0, 20.0, 30.0], [20.0], [10.0, 20.0], [30.0, -20.0]]
uj5u.com熱心網友回復:
這是一個使用正則運算式決議運算式然后從左到右構建結果的解決方案:
import re
def eval_exp(exp):
parts = re.findall(r'\d |[ -]', exp)
result = valuedict[int(parts[0])]
for i in range(1, len(parts), 2):
op = parts[i]
value = valuedict[int(parts[i 1])]
result = value if op == ' ' else -value
return result
{ k : eval_exp(v) for k, v in Vardict1.items() }
輸出:
{'Var1': 60.0, 'Var2': 20.0, 'Var3': 30.0, 'Var4': 10.0}
請注意,這假設唯一的運算子是 and -。
uj5u.com熱心網友回復:
from collections import Counter
valuedict = {1: 10.0, 2: 20.0, 3:30.0}
Vardict1 = {'Var1' : "1 2 3", 'Var2' : "2" , 'Var3': "1 2", 'Var4' : "3 - 2"}
for i in Vardict1:
if i=='Var1':
Vardict1[i]= valuedict[1] valuedict[2] valuedict[3]
elif i=='Var2':
Vardict1[i] =valuedict[2]
else:
Vardict1[i]=valuedict[3] -valuedict[2]
print(Vardict1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/488117.html
標籤:Python python-3.x 字典
上一篇:字典上的遞回字串連接
下一篇:Python嵌套字典追加
