如何将列表转换为字典,其中某些键缺少其值?

Zic*_*kyM 2 python dictionary try-except

我有一个对象列表,其数量在分号后关联。试图将此列表转换为字典,但某些键一旦转换将丢失其值。尝试使用try / except,但不确定如何将值分别存储到字典中。

例:

t = ['Contact:10', 'Account:20','Campaign:', 'Country:', 'City:']
Run Code Online (Sandbox Code Playgroud)

转换时,Campaign和Country对象将没有值。我想通过或指定a NaN作为字典值。

我尝试了类似的方法,但无济于事。

for objects in t:
    try:
        dictionary = dict(objects.split(":") for objects in t)
    except:
        pass
Run Code Online (Sandbox Code Playgroud)

任何建议表示赞赏。

Chr*_*per 9

您实际上不需要尝试/抓住:

t = ['Contact:10', 'Account:20','Campaign:', 'Country:', 'City:']
{ a: b for a,b in (i.split(':') for i in t) }
Run Code Online (Sandbox Code Playgroud)

这产生:

{'Account': '20', 'Campaign': '', 'City': '', 'Contact': '10', 'Country': ''}
Run Code Online (Sandbox Code Playgroud)

如果要None代替空字符串:

{ a: b if b else None for a,b in (i.split(':') for i in t) }
Run Code Online (Sandbox Code Playgroud)


blh*_*ing 8

您可以将生成器表达式与每个项目分开使用,并将输出传递给dict构造函数:

dict(i.split(':') for i in t)
Run Code Online (Sandbox Code Playgroud)

返回:

{'Contact': '10', 'Account': '20', 'Campaign': '', 'Country': '', 'City': ''}
Run Code Online (Sandbox Code Playgroud)

如果您希望将NaN设置为默认值,则可以使用dict理解来代替:

{a: b or float('nan') for i in t for a, b in (i.split(':'),)}
Run Code Online (Sandbox Code Playgroud)

返回:

{'Contact': '10', 'Account': '20', 'Campaign': nan, 'Country': nan, 'City': nan}
Run Code Online (Sandbox Code Playgroud)