我有一長串的名稱 - 值對在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']
我有一長串的名稱 - 值對在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']
使用字典理解:
result = dict((item['Name'], item['Value']) for item in name_value_pairs)
我建議新字典理解語法:
{item['Name']: item['Value'] for item in name_value_pairs}
如已通過@instabrite的評論中提到。
它已經可用since Python 2.7 (2010),速度更快。一些剖析:
使用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
使用字典內涵:{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 和更多可讀。
正是我在找的東西!這也適用於我: 'result = {item ['Name']:item ['Value'] in item_value_pairs}' 這是否等同於Python 3? – Instabrite
你的版本(帶大括號)現在看起來更普遍,所以你可以使用它,如果你喜歡。兩者之間的表現沒有差別。 –