在Dictionary中映射2个值

时间:2017-06-20 20:28:34

标签: python dictionary lambda

我有一个字典列表" list_dict"

输入:

list_dict=[{'a':'a' ,'b':'b','c':'lala'},{'a':'a1','b':'b1','c':'lala1'}]

我需要一个像这样的输出 - 所有与键对应的值' a'和键#39; b'对应的值映射到列表

 l1=['a-b','a1-b1']

这是我到目前为止所做的事情,如果没有关键字' a'在字典中它不应该抛出错误。只需将其视为空并继续。

l1=[element['a'] for element in list_dict if 'a' in element]

问题: 有人可以帮助我获得所需的输出吗? 如何使用lambda做到这一点?

3 个答案:

答案 0 :(得分:3)

如果密钥不存在,您希望使用dict的{​​{1}}方法阻止get

KeyError

使用此输入:

l1 = ['{}-{}'.format(element.get('a'), element.get('b')) for element in list_dict]

结果是:

list_dict = [
    {'a':'a' ,'b':'b','c':'lala'},
    {'a':'a1','b':'b1','c':'lala1'},
    {'b':'b'}
]

或者,在读完你的问题之后,你可能会要求这样的事情:

['a-b', 'a1-b1', 'None-b']

结果是:

l1 = ['{}-{}'.format(element['a'], element['b'])
    for element in list_dict if 'a' in element and 'b' in element]

使用相同的输入。

答案 1 :(得分:1)

以下是根据要求使用lambda的解决方案,

map(lambda x: '-'.join([x.get('a'), x.get('b')]), list_dict)

['a-b', 'a1-b1']

答案 2 :(得分:1)

使用列表理解:

l = [{'a':'a' ,'b':'b','c':'lala'},{'a':'a1','b':'b1','c':'lala1'}]
res = ['-'.join(v for k,v in d.items() if k in ('a','b')) for d in l]

print(res)

输出:

['a-b', 'a1-b1']