如何在python One Liner中获得所需结果?
object_list=[{'applicationName': "ATM Monitoring",
'roamingDrop': "",
'noOfCustomer': None,
'ipAddress': "192.168.1.1",
'url': "www.google.co.in",},
{'applicationName': None,
'roamingDrop': "",
'noOfCustomer': None,
'ipAddress': "192.168.1.1",
'url': "www.google.co.in",}]
所需结果是将所有None都替换为“”
object_list=[{'applicationName': "ATM Monitoring",
'roamingDrop': "",
'noOfCustomer': "",
'ipAddress': "192.168.1.1",
'url': "www.google.co.in",},
{'applicationName': "",
'roamingDrop': "",
'noOfCustomer': "",
'ipAddress': "192.168.1.1",
'url': "www.google.co.in",}]
实现此目的的简单函数是:
def simple():
for object in object_list:
for key, value in object.iteritems():
if value:
dict( object, **{key: value})
else:
dict(object, **{key: ''})
和Python一不成功的一班轮:
[dict(object, **{key: value}) if value else dict(object, **{key: ''})
for object in object_list for key, value in object.iteritems()]
名单理解能力能否达到目标?
解决方法:
lst=[{'applicationName': "ATM Monitoring",
'roamingDrop': "",
'noOfCustomer': None,
'ipAddress': "192.168.1.1",
'url': "www.google.co.in",},
{'applicationName': None,
'roamingDrop': "",
'noOfCustomer': None,
'ipAddress': "192.168.1.1",
'url': "www.google.co.in",}]
print [{key: val if val else "" for key, val in dct.items()} for dct in lst]
解释:
dct = lst[0]
{'applicationName': "ATM Monitoring",
'roamingDrop': "",
'noOfCustomer': None,
'ipAddress': "192.168.1.1",
'url': "www.google.co.in",}
使用字典理解(自Python 2.7起可用),首先只需将字典重构为相同的值即可:
{key: val for dct.items()}
并通过分配“”扩展它,以防万一,我们拥有原始值None(或其他任何值为False的值)
{key: val if val else "" for dct.items()}
最后(如上所示)将其应用于包围列表的列表中的所有项目.
{key: val for dct.items()}
严格来说,这会替换任何东西,用“”代替布尔False.
如果我们只想将None值替换为“”,例如False和0保持原样,我们将更加严格:
print [{key: val if val is not None else "" for key, val in dct.items()} for dct in lst]
标签:python-2-7,python
来源: https://codeday.me/bug/20191121/2054038.html