python-3.x - 将字典列表与公共键组合而不合并值
问题描述
我有多个字典列表如下:
data_aus =
[{'name': '2018,7', 'aus_ct': 13}, {'name': '2018,8', 'aus_ct': 3}, {'name': '2018,9', 'aus_ct': 3}]
data_asia =
[{'name': '2018,7', 'asia_ct': 10}, {'name': '2018,8', 'asia_ct': 11}, {'name': '2018,9', 'asia_ct': 6}]
data_us =
[{'name': '2018,7', 'us_ct': 5}, {'name': '2018,8', 'us_ct': 8}, {'name': '2018,9', 'us_ct': 9}, {'name': '2018,10', 'us_ct': 23}]
data_uk =
[{'name': '2018,7', 'uk_ct': 15}, {'name': '2018,8', 'uk_ct': 7}, {'name': '2018,9', 'uk_ct': 13}]
我想将这些列表组合成一个字典列表,该列表基于一个名为name
.
结果应如下所示:
data_combined = [
{'name': '2018,7', 'aus_ct': 13, 'asia_ct': 10, 'us_ct': 5, 'uk_ct':15},
{'name': '2018,8', 'aus_ct': 3, 'asia_ct': 11, 'us_ct': 8, 'uk_ct':7},
...]
有没有一种简单的方法可以做到这一点?请帮忙。
解决方案
1) 将所有数据准备到一个列表中,并在您的数据中找到所有可用的月份。
# Put all data into a single list
all_data = [month_data for country_data in [data_aus, data_asia, data_us, data_uk] for month_data in country_data]
# Figure out the months available
months = set(map(lambda entry: entry['name'], all_data))
2)通过逐月迭代并加入字典来合并数据。
data_combined = []
# Iterate month by month
for month in months:
# Get all the data from a single month (list of dicts)
month_data = filter(lambda entry: entry['name'] == month, all_data)
# "Tricky part" merge the list of dictionaries
sigle_month_data = {k: v for d in month_data for k, v in d.items()}
# Append to the overall combined list
data_combined.append(single_month_data)
3) 结果
print(data_combined)
{'uk_ct': 15, 'asia_ct': 10, 'aus_ct': 13, 'us_ct': 5, 'name': '2018,7'}
{'uk_ct': 7, 'asia_ct': 11, 'aus_ct': 3, 'us_ct': 8, 'name': '2018,8'}
{'uk_ct': 13, 'asia_ct': 6, 'aus_ct': 3, 'us_ct': 9, 'name': '2018,9'}
{'us_ct': 23, 'name': '2018,10'}
推荐阅读
- python - IndexError:插入排序代码的列表索引超出范围
- r - 在 PHP 页面上抓取关键字
- python - How to split a dataset with multiple variables into train and test while both having the same composition using python?
- python - 如何以列名作为标识符融化 pd.dataframe?
- javascript - 嵌套地图中的Reactjs handleclick绑定不起作用
- python - Python 中的网页抓取 - 我在价格列中收到特殊字符,但网页中没有特殊字符
- javascript - 从上传的pdf中获取包含换行符的文本
- flutter - Flutter 资产图像无法正确显示
- javascript - OAuth 2.0 的 Google 弃用通知
- docker - 文件夹存在于容器中,但无法 cd 进入 dockerfile 中的文件夹