代码之家  ›  专栏  ›  技术社区  ›  Chen A.

分析列表项并使用理解返回词典

  •  3
  • Chen A.  · 技术社区  · 7 年前

    我有两个项目的清单,我需要处理。这些项目是从数据库中检索的,因此 标题:值 但它们是未分析的。它们是由制表符分隔的字符串,因此列表如下所示:

    my_list = ['header1\theader2\theader3\theader4', 'val1\tval2\tval3\tval4']
    

    我需要从键值对创建dict。目前,我是通过列表理解来完成的:

    keys = [k.strip() for k in my_list[0].split('\t')]
    vals = [v.strip() for v in my_list[1].split('\t')]
    return dict(zip(keys, vals))
    

    我想可能有一种方法 听写理解 相反,我不知道怎么做。是否可以解析列表项并返回一个带有一行程序或更具python风格的字典?

    2 回复  |  直到 7 年前
        1
  •  4
  •   Ma0    7 年前

    我发现以下是最优雅的解决方案:

    dict_comp = dict(zip(*map(lambda x: x.split('\t'), my_list)))
    print(dict_comp)  # -> {'header1': 'val1', 'header2': 'val2', 'header3': 'val3', 'header4': 'val4'}
    

    或者 lambda 可替换为 生成器表达式 :

    dict_comp = dict(zip(*(x.split('\t') for x in my_list)))
    

    如果字符串不包含任何空格,则可以进一步缩短为:

    dict_comp = dict(zip(*map(str.split, my_list)))  # kudos @Chris_Rands
    
        2
  •  4
  •   Pax Vobiscum    7 年前

    试试这样的

    dict_comp = {k.strip():v.strip() for k,v in 
                   zip(my_list[0].split('\t'), my_list[1].split('\t'))}