2017-12-18 8 views
4

Wie kann ich eine Objekte/dict (?) Eigenschaften und in ein neues Objekt/dict?Gibt es einen Objektspreizungsoperator in Python 2.7x wie in Javascript?

Einfache Javascript:

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

wie etwa (https://caisbalderas.com/blog/python-function-unpacking-args-and-kwargs/) – Felipe

+0

'obj. copy() 'und' new_obj.update ({'x': '1'}) ' –

Antwort

7

Wenn Sie hatten Python >=3.5, können Sie Schlüssel verwenden Wort Expansion in dict wörtlichen:

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

Diese manchmal als "splatting" bezeichnet wird.

Wenn Sie auf Python 2.7 sind, nun, es gibt keine Entsprechung. Das ist das Problem mit etwas, das über 7 Jahre alt ist. Sie werden wie etwas zu tun haben: [? Argument Auspacken]

>>> d = {'x': '2', 'y': '1'} 
>>> x = {'x':1} 
>>> x.update(d) 
>>> x 
{'x': '2', 'y': '1'} 
+0

Das ist ein wirklich netter Ansatz. Aber ich bin immer ein 'SyntaxError' auf Python 2.7.x –

+0

Datei "", Zeile 366 ** doc, ^ Syntax: ungültige Syntax ich die Frage aktualisiert –

+0

@MatthewHarwood yep, war nicht klar, Sie waren auf Python 2.7. Du bist SOL, wenn du so etwas willst, das mit Diktatoren funktioniert. –

2

Sie können dies erreichen, indem ein dict auf dem ursprünglichen Basis zu schaffen, und dann Argument für die neuen/außer Kraft gesetzt Tasten Auspacken tun:

regions.append(dict(doc, **{'lat': '1234', 'lng': '1234'})) 
Verwandte Themen