2016-07-12 5 views
0

zu ändern Ich habe eine wirklich große Daten wie unten, die Struktur kann nicht behoben werden, aber ich möchte jeden Schlüssel finden Name ist "verwendet", multi der Wert von die "verwendet" von 10. Wie kann ich es tun? Der schwierige Teil ist die Liste Struktur für einige Zeit wird aus irgendeinem Grund geändert werden, und die "verwendet": inf sollte unverändert bleiben.iter über eine Liste verschachtelt mit dict und list, um Wert in dict

[{'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'}] 
+0

Der Klecks Daten machen diese Frage eher unangenehm zu versuchen, mit zu beantworten, wie es ist. Können Sie es besser formatieren oder ein kürzeres Beispiel für Ihre Daten angeben und auch das gewünschte Ergebnis anzeigen? – Blckknght

+0

Sie haben Werte verwendet, die "inf" sind, also was möchten Sie mit diesem Wert machen? ', {'used': 'inf', 'unit': 'MB', 'title': u '\ u786c \ u76d8 \ u53ca \ u5feb \ u7167 \ u5bb9 \ u91cf'}]}' –

+0

@Blckknght thx zur Erinnerung Ich bearbeite es in einem besser lesbaren Format. –

Antwort

0

Wie ich es sehe, ist die Antwort:

for item in list: 
    for usage in item['block_data']: 
     for used in usage['usage']: 
      new_used = used['used'] * 10 

Zumindest, dass Code für mich gearbeitet.

0

Mit Liste Verständnis:

[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]