web-dev-qa-db-fra.com

Existe-t-il une syntaxe de propagation d'objet dans python 2.7x, comme en Javascript?

Comment puis-je répartir les propriétés d'un objet/dict (?) Dans un nouvel objet/dict?

Javascript simple:

const obj = {x: '2', y: '1'}
const thing = {...obj, x: '1'}
// thing = {x: '1', y: 1}

Python:

regions = []
for doc in locations_addresses['documents']:
   regions.append(
        {
            **doc, # this will not work
            'lat': '1234',
            'lng': '1234',

        }
    )
return json.dumps({'regions': regions, 'offices': []})
9
Matthew Harwood

Si vous avez Python> = 3.5 , vous pouvez utiliser le développement clé-Word dans dict littal:

>>> d = {'x': '2', 'y': '1'}
>>> {**d, 'x':1}
{'x': 1, 'y': '1'}

Ceci est parfois appelé "éclaboussures".

Si vous êtes sur Python 2.7, eh bien, il n'y a pas d'équivalent. C'est le problème d'utiliser quelque chose qui a plus de 7 ans. Vous devrez faire quelque chose comme:

>>> d = {'x': '2', 'y': '1'}
>>> x = {'x':1}
>>> x.update(d)
>>> x
{'x': '2', 'y': '1'}
11
juanpa.arrivillaga

Vous pouvez y parvenir en créant une dict basée sur celle d'origine, puis en décompressant les arguments pour les nouvelles clés/les clés remplacées:

regions.append(dict(doc, **{'lat': '1234', 'lng': '1234'}))
2
Matias Cicero