簡體   English   中英

獲取 Json 格式 Python 中的 Common Key 值

[英]Get Common Key values in Json Format 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 匹配,那么 append channel_value 字段。 例如 Channel_key 'AMZ' 出現了兩次,所以它的 channel_value 將變為如下;

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

類似的焦油。

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

您可以嘗試以下代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM