如果非空,则将字典的值写入列表中

时间:2018-06-30 16:08:13

标签: python python-3.x dictionary

我有以下字典:

dict = {
       'field1': ('foo','bar'), 
       'field2': ('spam',''),
       'field3': ['apples', 'oranges']
       }

,我想将值写在列表中,但前提是非空:

list = ['foo', 'bar', 'apples', 'oranges']

我可以使用dict.values()吗?如何检查元组的第二个元素不为空?

3 个答案:

答案 0 :(得分:2)

您可以使用列表理解:

dic = {
   'field1': ('foo','bar'), 
   'field2': ('spam',''),
   'field3': ['apples', 'oranges']
   }
new_result = [i for b in dic.values() for i in b if all(b)]

输出:

['foo', 'bar', 'apples', 'oranges']

答案 1 :(得分:1)

import itertools
dict_ = {
       'field1': ('foo','bar'), 
       'field2': ('spam',''),
       'field3': ['apples', 'oranges']
       }

list_ = list(itertools.chain(*(lists for lists in dict_.values() if all(lists))))

print(list_)
# ['foo', 'bar', 'apples', 'oranges']

答案 2 :(得分:-1)

使用map进行列表理解,然后使用平面列表来匹配所需的输出:

from itertools import chain

d = {
    'field1': ('foo','bar'),
    'field2': ('spam',''),
    'field3': ['apples', 'oranges']
    }

print(list(chain.from_iterable([v for v in d.values() if all(map(lambda x: any(x), v))])))

# ['foo', 'bar', 'apples', 'oranges']

注意:您不应将字典称为dict,因为它掩盖了内置dict