今天群里一个朋友问了一个python问题,将列表a里的内容 转换成列表b那种格式,示例如下
a=[{'table': u'games', 'values': {u'name': u'aa', u'it': 1}, 'schema': u'db1'}, {'table': u'games', 'values':{u'name': u'bb', u'it': 2}, 'schema': u'db1'}, {'table': u'games02', 'values': {u'name': u'bb', u'it': 1}, 'schema': u'db1'}, {'table': u'games02', 'values': {u'name': u'b', u'it': 2}, 'schema': u'db1'}, {'table': u'games02', 'values': {u'name': u'c', u'it': 3}, 'schema': u'db1'}]
转换成:
b=[[{'table': u'games', 'values': {u'name': u'aa', u'it': 1}, 'schema': u'db1'},{'table': u'games', 'values': {u'name': u'bb', u'it': 2}, 'schema': u'db1'}],[{'table': u'games02', 'values': {u'name': u'bb', u'it': 1}, 'schema': u'db1'},{'table': u'games02', 'values': {u'name': u'b', u'it': 2}, 'schema': u'db1'},{'table': u'games02', 'values': {u'name': u'c', u'it': 3}, 'schema': u'db1'}]]
简单来说 就是统计相同schema跟table的内容合并到一个list里面
一开始一直用if else
判断来生成新的list,也不知道其实b得格式是可以变得。
因为源数据里面是字典,而且你不知道有多少条数据,所以就就掉进了if else得死胡同里,想了2个多小时!
最后让我想到了一个完美的解决方法,把dict的value弄成list格式,代码如下:
t_dict = {}
b = []
for items in a:
tab = items['table']
db = items['schema']
t_dict.setdefault(tab+db,[]).append(items)
for k,v in t_dict.items():
# print(k,v)
b.append(v)
print(b)
完了,群里另一个大牛也给出了解决方法,代码如下:
ret = {}
for item in a:
schema_key = item["schema"]
table_key = item["table"]
values = item["values"]
# ret["schema"][item["table"]] = item["values"]
c = item["schema"]
if ret.get(c):
if ret[c].get(item["table"]):
ret[schema_key][table_key].append(values)
# print(111)
else:
ret[schema_key][table_key] = []
ret[schema_key][table_key].append(values)
else:
ret[schema_key] = {}
ret[schema_key][table_key] = []
ret[schema_key][table_key].append(values)
print(ret)
这次让我学到了一个很有用的东西,完了还让我认识到了如果一种方式走不通,那就换种形式好了。结果对了就行。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏