将两个dicts组合成一个列表

use*_*827 3 python

我有两个字典,我想将这两个字符串组合在格式键的列表中 - >值,键 - >值...删除任何无或['']

目前我有以下我可以结合dicts但不创建组合列表...我有expecte输出..任何输入appreeciated

dict1={'313115': ['313113'], '311957': None}
dict2={'253036': [''], '305403': [], '12345': ['']}

dict = dict(dict1.items() + dict2.items())
print dict

{'313115': ['313113'], '311957': None, '253036': [''], '12345': [''], '305403': []}

EXPECTED OUTPUT:
['313115','313113','311957','253036','305403','12345']
Run Code Online (Sandbox Code Playgroud)

kev*_*ner 5

这应该这样做:

[i for k, v in (dict1.items() + dict2.items()) for i in [k] + (v or []) if i]
Run Code Online (Sandbox Code Playgroud)

走两个dicts的组合项,然后走键和值列表,返回存在的第二个步行中的每个项目.

返回['313115', '313113', '311957', '253036', '12345', '305403']你的示例dicts - 顺序是不同的,因为python的dict迭代是无序的.

编辑:

dict.items()在大型dicts上可能很昂贵 - 它需要O(n)大小,而不是迭代.如果你使用itertools,这会更有效(并保持你在一个地方使用的dicts):

import itertools
[i
 for k, v in itertools.chain.from_iterable(d.iteritems() for d in (dict1, dict2))
 for i in [k] + (v or [])
 if i]
Run Code Online (Sandbox Code Playgroud)

感谢Martijn Pieters的from_iterable小贴士.