首页 > 解决方案 > 获取 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'}]}

标签: pythonpython-3.xdictionary

解决方案


您可以尝试以下代码:

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'}]}]

推荐阅读