我有这样的字典(d):
d = {
'[primary_number]': '12345',
'[street_name]': 'Main',
'[street_predirection]': 'NW',
'[street_postdirection]': None,
'[street_suffix]': 'St',
'[secondary_number]': None,
'[secondary_designator]': None,
'[extra_secondary_number]': None,
'[zipcode]': '12345'
}
我想创建一个称为AddressStr的新键/值对,该对组合了d中的几个(但不是全部)字段。我正在尝试将其与以下代码结合起来:
d['AddressStr'] = d["[zipcode]"] + \
d["[street_name]"] + \
d["[primary_number]"] + \
d["[secondary_number]"] + \
d["[street_predirection]"] + \
d["[street_postdirection]"] + \
d["[street_suffix]"]
但是,这会产生错误:
can only concatenate str (not "NoneType") to str
因为[street_postdirection]
= None
。理想情况下,我只想进行一次检查/替换即可将这7个字段中的None值更改为''
,但是我不太确定该怎么做。我也想在创建d['AddressStr']
的过程中做适当的事情,但是如果那不可能的话,我会同意的。
答案 0 :(得分:3)
您可以join
以外的值None
:
keys = ["[zipcode]", "[street_name]", "[primary_number]",
"[secondary_number]", "[street_predirection]", "[street_postdirection]",
"[street_suffix]"]
d['AddressStr'] = ' '.join([d[key] for key in keys if d[key] is not None])
答案 1 :(得分:0)
您可以使用str()方法,并使用在布尔检查时None表现为false的属性:
d['AddressStr'] = str(d["[zipcode]"] or '') + \
str(d["[street_name]"] or '') + \
str(d["[primary_number]"] or '') + \
str(d["[secondary_number]"] or '') + \
str(d["[street_predirection]"] or '') + \
str(d["[street_postdirection]"] or '') + \
str(d["[street_suffix]"] or '')