Py学习  »  Python

python将dict中的值合并为新的键/值对,用空字符串替换none

DBA108642 • 6 年前 • 1681 次点击  

我有一本这样的字典:

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'] ,但如果不可能的话,我同意。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47101
文章 [ 2 ]  |  最新文章 6 年前
Bruno Portugal
Reply   •   1 楼
Bruno Portugal    6 年前

您可以使用str()方法并使用在布尔检查中“无”行为为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 '')
Thierry Lathuille
Reply   •   2 楼
Thierry Lathuille    6 年前

你可以 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])