python - 获取 Json 格式 Python 中的公共键值
问题描述
我有一个包含以下值的列表,其中每个值都是 dict;所以基本上它是一个值作为字典的列表
{'channel_key': 'AMZ', 'channel_desc': 'amazon UK', 'channel_value': [{'date': '2020-03-01', 'price': '10'}]}
{'channel_key': 'ebay_us', 'channel_desc': 'ebay US', 'channel_value': [{'date': '2020-03-01', 'price': '10'}]}
{'channel_key': 'tar', 'channel_desc': 'target', 'channel_value': [{'date': '2020-03-01', 'price': '10'}]}
{'channel_key': 'AMZ', 'channel_desc': 'amazon UK', 'channel_value': [{'date': '2020-03-02', 'price': '100'}]}
{'channel_key': 'ebay_us', 'channel_desc': 'ebay US', 'channel_value': [{'date': '2020-03-02', 'price': '30'}]}
{'channel_key': 'tar', 'channel_desc': 'target', 'channel_value': [{'date': '2020-03-02', 'price': '20'}]}
{'channel_key': 'alibaba', 'channel_desc': 'Alibaba', 'channel_value': [{'date': '2020-03-02', 'price': '30'}]}
我要做的是如果 channel_key 匹配,则附加 channel_value 字段。例如 Channel_key 'AMZ' 出现了两次,所以它的 channel_value 将变为如下;
'channel_value': [{'date': '2020-03-01', 'price': '10'},{'date': '2020-03-02', 'price': '100'}]
类似的焦油。
预期输出将是这样的:
{'channel_key': 'AMZ', 'channel_desc': 'amazon UK', 'channel_value': [{'date': '2020-03-01', 'price': '10'},{'date': '2020-03-02', 'price': '100'}]}
{'channel_key': 'ebay_us', 'channel_desc': 'ebay US', 'channel_value': [{'date': '2020-03-01', 'price': '10'},{'date': '2020-03-02', 'price': '30'}]}
{'channel_key': 'tar', 'channel_desc': 'target', 'channel_value': [{'date': '2020-03-01', 'price': '10'},{'date': '2020-03-02', 'price': '20'}]}
{'channel_key': 'alibaba', 'channel_desc': 'Alibaba', 'channel_value': [{'date': '2020-03-02', 'price': '30'}]}
解决方案
您可以尝试以下代码:
def convert(t):
d = {}
for x in t:
channel_key = x['channel_key']
if channel_key in d:
d[channel_key]['channel_value'].extend(x['channel_value'])
else:
d[channel_key] = x
return list(d.values())
if __name__ == '__main__':
t = [
{'channel_key': 'AMZ', 'channel_desc': 'amazon UK', 'channel_value': [{'date': '2020-03-01', 'price': '10'}]},
{'channel_key': 'ebay_us', 'channel_desc': 'ebay US', 'channel_value': [{'date': '2020-03-01', 'price': '10'}]},
{'channel_key': 'tar', 'channel_desc': 'target', 'channel_value': [{'date': '2020-03-01', 'price': '10'}]},
{'channel_key': 'AMZ', 'channel_desc': 'amazon UK', 'channel_value': [{'date': '2020-03-02', 'price': '100'}]},
{'channel_key': 'ebay_us', 'channel_desc': 'ebay US', 'channel_value': [{'date': '2020-03-02', 'price': '30'}]},
{'channel_key': 'tar', 'channel_desc': 'target', 'channel_value': [{'date': '2020-03-02', 'price': '20'}]},
{'channel_key': 'alibaba', 'channel_desc': 'Alibaba', 'channel_value': [{'date': '2020-03-02', 'price': '30'}]}
]
converted_t = convert(t)
from pprint import pprint
pprint(converted_t)
哪个打印
[{'channel_desc': 'amazon UK',
'channel_key': 'AMZ',
'channel_value': [{'date': '2020-03-01', 'price': '10'},
{'date': '2020-03-02', 'price': '100'}]},
{'channel_desc': 'ebay US',
'channel_key': 'ebay_us',
'channel_value': [{'date': '2020-03-01', 'price': '10'},
{'date': '2020-03-02', 'price': '30'}]},
{'channel_desc': 'target',
'channel_key': 'tar',
'channel_value': [{'date': '2020-03-01', 'price': '10'},
{'date': '2020-03-02', 'price': '20'}]},
{'channel_desc': 'Alibaba',
'channel_key': 'alibaba',
'channel_value': [{'date': '2020-03-02', 'price': '30'}]}]
推荐阅读
- python - 从 sklearn 数据集下载 MNIST 数据会出现超时错误
- windows - Electron 上 Windows 系统托盘“重音颜色覆盖”的侦听器
- python - Odoo 10:停止树视图中的创建按钮以打开表单视图
- docker - 当我使用 Dockerfile 构建映像时如何停止构建?
- javascript - React 派生组件不会在状态更改时更新
- android - kotlin(anko) 将主要活动中的数据解析为具有回收器视图的另一个活动[关闭]
- c# - HtmlAgilitypack 无法加载某些 html 代码。在 w3wp.exe 中导致未处理的 .net Framework 异常
- javascript - Angular 6:网址上显示的插座名称如何删除?
- angular - Angular CLI 错误:serve 命令需要在 Angular 项目中运行,但找不到项目定义
- python - Return bool if a string shares all characters with another string including doubles Python-3.x