将名称 - 值对转换为Python字典

时间:2017-02-05 04:01:14

标签: python python-3.x

我在Python 3中有一长串名称 - 值对,它们代表数据库中的一行。由于每行的属性数量相当大,我想知道是否有更快或更多的pythonic方式将其转换为dict而不是以下:

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

2 个答案:

答案 0 :(得分:2)

使用词典理解:

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

答案 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. 使用dict理解:{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
    
  3. 正如您所看到的,字典理解速度提高了2.5倍。而imho,更多Pythonic 和更可读的