2017-02-05 87 views
0

我有一長串的名稱 - 值對在Python 3中,表示數據庫中的一行。由於屬性的數量是每行相當大的,我想知道如果有一個更快或更Python的方式將它轉換成一個字典比下面將名稱/值對轉換爲Python字典

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

回答

2

使用字典理解:

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

正是我在找的東西!這也適用於我: 'result = {item ['Name']:item ['Value'] in item_value_pairs}' 這是否等同於Python 3? – Instabrite

+1

你的版本(帶大括號)現在看起來更普遍,所以你可以使用它,如果你喜歡。兩者之間的表現沒有差別。 –

1

我建議字典理解語法:

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

如已通過@instabrite的評論中提到。

它已經可用since Python 2.7 (2010),速度更快。一些剖析:

  1. 使用dict()構造: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. 使用字典內涵:{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 
    

正如你所看到的,字典理解是2.5倍更快。另外,更多Pythonic 和更多可讀