2017-02-05 2 views
0

Ich habe eine lange Liste von Name-Wert-Paaren in Python 3, die eine einzelne Zeile aus einer Datenbank darstellen. Da die Anzahl der Attribute ziemlich groß pro Zeile ist, frage ich mich, ob es eine schnellere oder pythonic Weise ist dies in einem dict als die umwandeln folgende:Konvertieren von Name-Wert-Paar in Python-Wörterbuch

name_value_pairs = [{'Name':'id', 'Value':1}, {'Name':'age', 'Value':22}] 
for pair in name_value_pairs: 
    result[pair['Name']] = pair['Value'] 

Antwort

2

ein Wörterbuch Verständnis Verwendung:

result = dict((item['Name'], item['Value']) for item in name_value_pairs) 
+2

Genau das, was ich gesucht habe! Das hat auch bei mir funktioniert: 'result = {item ['Name']: item ['Value'] für item in name_value_pairs}' Ist das gleichbedeutend und ist eines mehr bevorzugt als das andere für Python 3? – Instabrite

+1

Ihre Version (mit den geschweiften Klammern) scheint heutzutage häufiger zu sein, Sie können sie also einfach verwenden, wenn Sie möchten. Es wird keinen Leistungsunterschied zwischen den beiden geben. –

1

ich würde vorschlagen, die neueren Wörterbuch Verständnis Syntax:

{item['Name']: item['Value'] for item in name_value_pairs} 

wie bereits in den Kommentaren von @instabrite erwähnt.

Es war verfügbar since Python 2.7 (2010) und ist schneller. Einige Profilierung:

  1. Mit dem dict() Konstruktor: dict((item['Name'], item['Value']) for item in name_value_pairs)

    >>> import timeit 
    >>> timeit.timeit("dict((item['Name'], item['Value']) for item in name_value_pairs)", 
    ...    setup="name_value_pairs = [{'Name':'id', 'Value':1}, {'Name':'age', 'Value':22}]") 
    0.6748202270264301 
    
  2. Mit dict Comprehensions: {item['Name']: item['Value'] for item in name_value_pairs}

    >>> timeit.timeit("{item['Name']: item['Value'] for item in name_value_pairs}", 
    ...    setup="name_value_pairs = [{'Name':'id', 'Value':1}, {'Name':'age', 'Value':22}]") 
    0.2638828816925525 
    

Wie Sie sehen können, die dict Verständnis ist 2.5x schneller. Und imho, mehr Pythonic und besser lesbar.