首页 > 解决方案 > 连接多个字典中的字符串值

问题描述

假设我有一个字典列表(每个字典都有相同的键),如下所示:

list_of_dicts = [
    {'Id': 4726, 'Body': 'Hello from John', 'Title': None, 'Comments': 'Dallas. '},
    {'Id': 4726, 'Body': 'Hello from Mary', 'Title': None, 'Comments': "Austin"},
    {'Id': 4726, 'Body': 'Hello from Dylan', 'Title': None, 'Comments': "Boston"},
]

我只需要连接正文、标题和评论部分并返回一个字典,如下所示:

{'Id': 4726, 'Body': 'Hello from John Hello from Mary Hello from Dylan', 'Title': None, 'Comments': 'Dallas. Austin Boston'}

请注意,标题为无。所以,我们必须在那里小心。这就是我到目前为止所做的......但是,在某个地方失败了......我看不到在哪里......

    keys = set().union(*list_of_dicts)
    print(keys)
    k_value = list_of_dicts[0]['Id']
    d_dict = {k: " ".join(str(dic.get(k, '')) for dic in list_of_dicts) for k in keys if k != 'Id'}

    merged_dict = {'Id': k_value}
    merged_dict.update(d_dict)

但是,上面返回了这个......我不喜欢:

Final Merged Dict: {'Id': 4726, 'Body': 'Hello from John Hello from Mary Hello from Dylan', 'Title': 'None None None', 'Comments': 'Dallas. Austin Boston'}

标签: pythondictionary

解决方案


首先,我会删除Idfromkeys以避免在字典理解中跳过它,并使用简单的分配而不是.update()最后。

在 的参数中join,过滤掉什么时候dic[k]是无。如果join结果为空字符串(因为所有值都是None),则将其转换None为最终结果。

keys = set().union(*list_of_dicts)
keys.remove('Id')
print(keys)
k_value = list_of_dicts[0]['Id']
d_dict = {k: (" ".join(str(dic[k]) for dic in list_of_dicts if k in dic and dic[k] is not None) or None) for k in keys}
d_dict['Id'] = k_value

print(d_dict)

演示


推荐阅读