![](/img/trans.png)
[英]change the value of a multidimentional dict in python with nested dict enclosed in a list
[英]iter over a list nested with dict and list to change value in dict
我得到了一个非常大的数据,如下所示,该结构可能没有固定,但我想找到每个键名是“ used”的,将“ used”的值乘以10。我该怎么做? 困难的部分是由于某种原因,列表结构将在一段时间内被更改,而“二手”:INF应保持不变。
[{'block_data':
[{'item_title': u'\u4e3b\u673a',
'item_num': 5,
'item_class': 'hosts',
'item_url': '/admin/hypervisors/',
'usage': [{'used': 5, 'title': u'\u6d3b\u52a8'},
{'used': 5, 'title': u'\u542f\u7528'}]},
{'item_title': u'\u8d44\u6e90',
'usage': [{'used': 1319,
'limit': 1536,
'title': u'\u53ef\u5206\u914d\u5185\u6838'},
{'used': 5828230,
'limit': 6024840,
'unit': 'MB',
'title': u'\u53ef\u5206\u914d\u5185\u5b58'}],
'item_class': 'resources'},
{'item_title': u'\u9879\u76ee',
'item_num': 24,
'item_class': 'tenants',
'item_url': '/identity/',
'usage': [{'used': 23,
'limit': 24,
'title': u'\u6d3b\u52a8'}]},
{'item_title': u'\u7528\u6237',
'item_num': 125,
'item_class': 'users',
'item_url': '/identity/users/',
'usage': [{'used': 125,
'limit': 125,
'title': u'\u6d3b\u52a8'}]}
],
'block_title': u'\u8d44\u6e90'},
{'block_data':
[{'item_title': u'\u4e91\u4e3b\u673a',
'item_num': 124,
'item_class': 'instances',
'item_url': '/admin/instances/',
'usage': [{'used': 124,
'title': u'\u4e91\u4e3b\u673a'},
{'used': 245,
'title': u'\u865a\u62df\u5185\u6838'},
{'used': 222722,
'unit': 'MB',
'title': u'\u5185\u5b58'},
{'used': 15,
'title': u'\u5feb\u7167'}]},
{'item_title': u'\u4e91\u786c\u76d8',
'item_num': 69,
'item_class': 'volumes',
'item_url': '/admin/volumes/',
'usage': [{'used': 69,
'title': u'\u4e91\u786c\u76d8'},
{'used': 'inf',
'title': u'\u4e91\u786c\u76d8\u5feb\u7167'},
{'used': 'inf',
'unit': 'MB',
'title': u'\u786c\u76d8\u53ca\u5feb\u7167\u5bb9\u91cf'}]},
{'item_title': u'\u955c\u50cf',
'item_num': 27,
'item_class': 'images',
'item_url': '/admin/images/',
'usage': [{'used': 27,
'title': u'\u955c\u50cf'},
{'used': 11, 'title': u'Linux'},
{'used': 3, 'title': u'Windows'},
{'used': 13, 'title': u'ISO'}]},
{'item_title': u'\u5b89\u5168\u7ec4',
'item_num': 39,
'item_class': 'access_and_security',
'usage': [{'used': 39,
'title': u'\u5b89\u5168\u7ec4'}]
}],
'block_title': u'\u8ba1\u7b97'},
{'block_data':
[{'item_title': u'\u7f51\u7edc',
'item_num': 39,
'item_class': 'networks',
'item_url': '/admin/networks/',
'usage': [{'used': 39,
'title': u'\u7f51\u7edc'}]
},
{'item_title': u'\u5916\u7f51IP',
'item_num': 40,
'item_class': 'floating_ips',
'usage': [{'used': 40,
'title': u'\u5916\u7f51IP'}]
},
{'item_title': u'\u8def\u7531\u5668',
'item_num': 9,
'item_class': 'routers',
'item_url': '/admin/routers/',
'usage': [{'used': 9,
'title': u'\u8def\u7531\u5668'}]}],
'block_title': u'\u7f51\u7edc'}]
在我看来,答案是:
for item in list:
for usage in item['block_data']:
for used in usage['usage']:
new_used = used['used'] * 10
至少,该代码对我有用。
使用列表理解:
[k['used']*10 if isinstance(k['used'], (int, long)) else k['used'] for i in a for j in i['block_data'] for k in j['usage']]
Out[29]:
[500,
500,
131900,
582823000,
2300,
12500,
12400,
24500,
22272200,
1500,
6900,
'inf',
'inf',
2700,
1100,
300,
1300,
3900,
3900,
4000,
900]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.