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)
任何建议表示赞赏。
您实际上不需要尝试/抓住:
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)
您可以将生成器表达式与每个项目分开使用,并将输出传递给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)