我是编程新手。我试图弄清楚如何从“实际”中减去“预算”,然后使用嵌套的for循环将值更新为“方差”。但是,我读到,迭代时更改字典不是最佳实践。到目前为止,我对如何继续感到困惑。
for i in properties:
for j in properties[i]:
if j == "actual":
sum = properties[i][j]
print('\nActual:' , sum)
if j == "budgeted":
sum_two = properties[i][j]
print('Budgeted:' , sum_two)
diff = sum_two - sum
print('Variance:', diff)
default_value = 0
properties = {587: {'prop_name': 'Collington'}, 'rental_income': {'apartment_rent': '5120-0000', 'resident_assistance': '5121-0000', 'gain_loss': '5120-0000'}, 51200000: {'actual': 29620, 'budgeted': 30509, 'variance': default_value}, 51210000: {'actual': 25620, 'budgeted': 40509, 'variance': default_value}, ............
答案 0 :(得分:2)
仅遍历字典并检查内部字典中是否存在actual
,variance
和budgeted
,如果存在,则修改variance
值< / p>
for k, v in properties.items():
if (('actual' in v.keys()) and ('variance' in v.keys()) and ('budgeted' in v.keys())):
properties[k]['variance'] = properties[k]['actual']-properties[k]['budgeted']
答案 1 :(得分:1)
迭代时在字典中修改值 并没有错。唯一不建议的方法是修改字典本身,即添加/删除元素。
答案 2 :(得分:1)
尝试类似的东西:
for i in properties:
properties[i]['variance'] = properties[i]['budgeted'] - properties[i]['actual']
如果不确定字典中是否存在bugeted
和actual
,则应捕获KeyError并进行适当处理:
for i in properties:
try:
properties[i]['variance'] = properties[i]['budgeted'] - properties[i]['actual']
except KeyError:
properties[i]['variance'] = -1 # Set to some special value or just pass
答案 3 :(得分:1)
您的数据格式很奇怪,我总是尝试在字典中将类似的对象归为一组,而不是在字典的同一级别上包含元数据和项的“列表”。不过,这将为您工作:
for prop in properties:
p = properties[prop]
if 'actual' or 'budgeted' in p.keys():
# get() wont error if not found, also default to 0 if not found
p['variance'] = p.get('budgeted', 0) - p.get('actual', 0)
import json
print(json.dumps(properties, indent=4))
输出:
{
"587": {
"prop_name": "Collington"
},
"rental_income": {
"apartment_rent": "5120-0000",
"resident_assistance": "5121-0000",
"gain_loss": "5120-0000"
},
"51200000": {
"actual": 29620,
"budgeted": 30509,
"variance": 889
},
"51210000": {
"actual": 25620,
"budgeted": 40509,
"variance": 14889
}
}
答案 4 :(得分:0)
sum = None
sum_two = None
for i in properties:
for j in i:
if j=="actual":
sum = properties [i]["actual"]
print('\nActual:' , sum)
if j == "budgeted":
sum_two = properties[i]["budgeted"]
print('Budgeted:' , sum_two)
diff = sum_two - sum
print('Variance:', diff)
我没有得到确切的含义,但是应该可以。