将多个缺失值的列表转换为一个字典

cod*_*cer 3 python pandas

我正在尝试将多个列表添加到字典中 - 一个键和一个值列表。我可以在字典中添加两个列表,但我想知道如何将多个列表与其中一个列表中的某些缺失值连接起来。

a = ['apple', 'orange', 'lemon']
b = ['London', 'New York', 'Tokyo']
c = ['Red', 'Orange', 'Yellow']
d = ['good', 'bad', '']

fruito = zip(a, b)
fruit_dictionary = dict(fruito); fruit_dictionary
Run Code Online (Sandbox Code Playgroud)

预期输出:

fruit_dictionary = {'apple': ['London', 'Red', 'good'],
                    'orange': ['New York', 'Orange', 'bad'],
                    'lemon': ['Tokyo', 'Yellow']}
Run Code Online (Sandbox Code Playgroud)

moz*_*way 9

您可以将以下字典理解zip与参数包装一起使用:

{k:v for k, *v in zip(a,b,c,d)}
Run Code Online (Sandbox Code Playgroud)

输出:

{'apple': ['London', 'Red', 'good'],
 'orange': ['New York', 'Orange', 'bad'],
 'lemon': ['Tokyo', 'Yellow', '']}
Run Code Online (Sandbox Code Playgroud)

或者删除空字符串:

{'apple': ['London', 'Red', 'good'],
 'orange': ['New York', 'Orange', 'bad'],
 'lemon': ['Tokyo', 'Yellow', '']}
Run Code Online (Sandbox Code Playgroud)

输出:

{'apple': ['London', 'Red', 'good'],
 'orange': ['New York', 'Orange', 'bad'],
 'lemon': ['Tokyo', 'Yellow']}
Run Code Online (Sandbox Code Playgroud)

不等长的列表

为了完整起见,我在此处添加了一个通用解决方案,以防输入列表具有不同的长度。解决方案是使用itertools.zip_longest

{k:[e for e in v if e]      # using truthy values here, could also use e != ''
 for k, *v in zip(a,b,c,d)}
Run Code Online (Sandbox Code Playgroud)