简体   繁体   English

获取 Json 格式 Python 中的 Common Key 值

[英]Get Common Key values in Json Format Python

I have a list with following values where each value is dict;我有一个包含以下值的列表,其中每个值都是 dict; so basically its a list with values as dictionary所以基本上它是一个值作为字典的列表

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

What I am trying to do is if channel_key matches, then append channel_value field.我想做的是如果 channel_key 匹配,那么 append channel_value 字段。 For eg Channel_key 'AMZ' is present twice, so its channel_value will become as follows;例如 Channel_key 'AMZ' 出现了两次,所以它的 channel_value 将变为如下;

'channel_value': [{'date': '2020-03-01', 'price': '10'},{'date': '2020-03-02', 'price': '100'}]

similary for tar.类似的焦油。

Expected Output will be something like this:预计 Output 将是这样的:

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

You can try the following code:您可以尝试以下代码:

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)

which prints哪个打印

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM