• Python代码实现扁平化字典


       以下是实现扁平化字典的一段代码,in_data是输入数据,out_data是输出数据。
     1 in_data= {
     2     u'deliveryOrder': {
     3         u'warehouseCode': u'OTHER',
     4         u'deliveryOrderCode': u'3600120100000',
     5         u'receiverInfo': {
     6             u'detailAddress': u'u5927u5382u680818u53f7101',
     7             u'city': u'u4e94u8fde',
     8             u'province': u'u5c71u4e1c',
     9             u'area': u'u5927u5382'
    10         },
    11         u'senderInfo': {
    12             u'detailAddress': u'u6587u4e09u8def172u53f7',
    13             u'city': u'u676du5dde',
    14         },
    15     },
    16     u'orderLines': {
    17         u'orderLine': {
    18             u'itemId': u'0192010101',
    19             u'planQty': u'20',
    20         }
    21     }
    22 }
    23 
    24 #定义key的转换规则
    25 match_list = {'area': 'receiver_area', 'city': 'receiver_city', 'deliveryOrderCode': 'express_code','detailAddress': 'receiver_address','province': 'receiver_province','warehouseCode': 'warehouse_code'}
    26 
    27 #初始化out_data
    28 out_data={}
    29 
    30 
    31 def trans(in_data, match_list):
    32     #在新建的out_data中写入key和value
    33     for k,v in in_data.items():
    34         if (isinstance(v, dict)):
    35             if k == 'orderLines':
    36                 out_data['lines']= [{'item_id':v['orderLine']['itemId'], 'product_qty':v['orderLine']['planQty']}]
    37             elif k == 'senderInfo':
    38                 out_data['sender_city'] = v['city']
    39                 out_data['sender_address'] = v['detailAddress']
    40             else:
    41                 trans(v, match_list)
    42         else:
    43             out_data[k] = v
    44 
    45     #将out_data的key变换成目标key
    46     for k,v in out_data.items():
    47         if k in match_list.keys():
    48             out_data[match_list[k]] = v
    49             del out_data[k]
    50 
    51     #返回out_data
    52     print("in_data:{}".format(in_data))
    53     print("out_data:{}
    ".format(out_data))54     return out_data
    55 trans(in_data, match_list)

       以下是在mac os python 3.5环境执行代码的结果。

     1 in_data:{'detailAddress': '大厂栈18号101', 'city': '五连', 'province': '山东', 'area': '大厂'}
     2 out_data:{'receiver_address': '大厂栈18号101', 'receiver_area': '大厂', 'receiver_province': '山东', 'sender_city': '杭州', 'receiver_city': '五连', 'sender_address': '文三路172号'}
     3 
     4 in_data:{'senderInfo': {'detailAddress': '文三路172号', 'city': '杭州'}, 'receiverInfo': {'detailAddress': '大厂栈18号101', 'city': '五连', 'province': '山东', 'area': '大厂'}, 'deliveryOrderCode': '3600120100000', 'warehouseCode': 'OTHER'}
     5 out_data:{'receiver_address': '大厂栈18号101', 'warehouse_code': 'OTHER', 'receiver_area': '大厂', 'receiver_province': '山东', 'express_code': '3600120100000', 'sender_city': '杭州', 'receiver_city': '五连', 'sender_address': '文三路172号'}
     6 
     7 in_data:{'deliveryOrder': {'senderInfo': {'detailAddress': '文三路172号', 'city': '杭州'}, 'receiverInfo': {'detailAddress': '大厂栈18号101', 'city': '五连', 'province': '山东', 'area': '大厂'}, 'deliveryOrderCode': '3600120100000', 'warehouseCode': 'OTHER'}, 'orderLines': {'orderLine': {'planQty': '20', 'itemId': '0192010101'}}}
     8 out_data:{'receiver_address': '大厂栈18号101', 'warehouse_code': 'OTHER', 'receiver_area': '大厂', 'receiver_province': '山东', 'express_code': '3600120100000', 'sender_city': '杭州', 'lines': [{'product_qty': '20', 'item_id': '0192010101'}], 'receiver_city': '五连', 'sender_address': '文三路172号'}
  • 相关阅读:
    memcached与redis的一些区别小结
    ubuntu下定时任务
    hdu4135 容斥定理
    hdu1251 统计难题 字典树
    hdu1710 Binary Tree Traversals(二叉树的遍历)
    Codeforces Round #364 (Div. 2) B. Cells Not Under Attack
    KMP算法 hdu4686 Oulipo
    判断字符串是否在字典里
    floyd算法 poj2253
    最短路径dijkstra算法
  • 原文地址:https://www.cnblogs.com/newer027/p/6418830.html
Copyright © 2020-2023  润新知