Maison  >  Questions et réponses  >  le corps du texte

Comment Python analyse-t-il ce type de données ? data__key__hello = "world"

Par exemple, il existe un tel dictionnaire :

{
    'data__key_hello': "world",
    'data__key_bar': "foo",
    'data__a': "b",
    'b': 'c',
}

Après la conversion, cela devient

{
    'data': {
        'key': {
            'hello': 'world',
            'bar': 'foo'
        },
        'a': 'b',
    },
    'b': 'c'
}

Il est divisé par un trait de soulignement

黄舟黄舟2712 Il y a quelques jours631

répondre à tous(2)je répondrai

  • 世界只因有你

    世界只因有你2017-05-18 10:56:23

    # coding: utf-8
    
    def parse_dict(obj={}):
        result = {}
        for key in obj:
            value = obj[key]
            parse_key_value(key, value, result)                
        return result
    
    def parse_key_value(key, value, result={}):
        if not key:
            return
    
        head = ''
        while 1:
            head, _, tail = key.partition('_') 
            if head:
                break
            key = tail
    
        if head not in result:
            if tail:
                result[head] = {} 
            else:
                result[head] = value
                return 
        
        parse_key_value(tail, value, result[head])
    
    obj = {
        'data__key_hello': "world",
        'data__key_bar': "foo",
        'data__a': "b",
        'b': 'c',
    }
    
    print parse_dict(obj)
    

    répondre
    0
  • 巴扎黑

    巴扎黑2017-05-18 10:56:23

    Faire avec ça

    d = {
        'data__key_hello': "world",
        'data__key_bar': "foo",
        'data__a': "b",
        'b': 'c',
    }
    
    n = {}
    for k, v in d.items():
        keys = k.replace('__', '_').split('_')
        child = n
        for i, key in enumerate(keys):
            child = child.setdefault(key, {} if i < len(keys) - 1 else v)
    
    print n

    répondre
    0
  • Annulerrépondre