Python中字典的value是列表的运用

  • A+
所属分类:BLOG Python

今天群里一个朋友问了一个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)

Python中字典的value是列表的运用

这次让我学到了一个很有用的东西,完了还让我认识到了如果一种方式走不通,那就换种形式好了。结果对了就行。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: