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

时间:2018-02-21 16:22:24

标签: python python-2.7 dictionary dictionary-comprehension

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

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))

我认为可能有一种方法可以使用 dict comprehension 代替,但我无法理解。是否可以解析列表项并返回带有单行或更加pythonic方式的字典?

2 个答案:

答案 0 :(得分:4)

尝试这样的事情

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

答案 1 :(得分:4)

我找到了最优雅的解决方案:

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