python - 连接多个字典中的字符串值
问题描述
假设我有一个字典列表(每个字典都有相同的键),如下所示:
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'}
解决方案
首先,我会删除Id
fromkeys
以避免在字典理解中跳过它,并使用简单的分配而不是.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)
推荐阅读
- angular - 仅在 IE 中触发 Angular 输入事件
- java - 反序列化序列化的不对称 [JsonInclude] 行为
- java - 两个 Roll Dicer Java 面向对象的方式
- unit-testing - 如何在 Grails 单元测试类中动态模拟域?
- wordpress - 在 Wordpress 网站中,连接到另一个基于 web 的应用程序
- css - 我可以在 CSS 伪类中使用 PHP
- angular - *NgFor 中带角度的条件类
- javascript - 纯方式修改 JS 对象
- r - html_table 无法识别我的节点通行证,尽管它是一个表格
- r - 需要对函数的输入进行预处理