【问题标题】:Split dict by value of one of the keys(To save it as a single data)按其中一个键的值拆分字典(将其保存为单个数据)
【发布时间】:2018-11-14 09:58:38
【问题描述】:

My data and issue are similar as this, but it's not the same

如何按其中一个键的值拆分dict并将其保存为PostgreSQL中的单个数据?我有一本字典如下:

data = {
    "id": [1,2,3,4,5,6,7,8], 
    "info": ["info1"],# one or more than one item, number >= 1       
    "number": [1],# one or more than one item, the numbers are the same as info's  
}

我想通过 id 将其拆分为一个,保留各自的信息和编号,并将其保存为 PostgreSQL 中的单个数据,如下所示:

 {'id': 1, 'info': 'info1', 'number': 1},
 {'id': 2, 'info': 'info1', 'number': 1},
 {'id': 3, 'info': 'info1', 'number': 1},
 {'id': 4, 'info': 'info1', 'number': 1},
 {'id': 5, 'info': 'info1', 'number': 1},
 {'id': 6, 'info': 'info1', 'number': 1},
 {'id': 7, 'info': 'info1', 'number': 1},
 {'id': 8, 'info': 'info1', 'number': 1},

如果"info" 的数据有两个以上的信息,"info":["info1", "info2"]"number" 也应该是[1, 2]。那么data1应该如下:

 {'id': 1, 'info': 'info1', 'number': 1},
 {'id': 1, 'info': 'info2', 'number': 2},
 {'id': 2, 'info': 'info1', 'number': 1},
 {'id': 2, 'info': 'info2', 'number': 2},
 {'id': 3, 'info': 'info1', 'number': 1},
 {'id': 3, 'info': 'info2', 'number': 2},
 {'id': 4, 'info': 'info1', 'number': 1},
 {'id': 4, 'info': 'info2', 'number': 2},
 {'id': 5, 'info': 'info1', 'number': 1},
 {'id': 5, 'info': 'info2', 'number': 2},
 {'id': 6, 'info': 'info1', 'number': 1},
 {'id': 6, 'info': 'info2', 'number': 2},
 {'id': 7, 'info': 'info1', 'number': 1},
 {'id': 7, 'info': 'info2', 'number': 2},
 {'id': 8, 'info': 'info1', 'number': 1},
 {'id': 8, 'info': 'info2', 'number': 2},

什么是 Pythonic 的做法? Django方式更好!提前致谢。

【问题讨论】:

    标签: django python-3.x postgresql


    【解决方案1】:

    你应该使用来自 itertools 的产品 https://docs.python.org/3/library/itertools.html#itertools.product

    id_ = data['id']
    info = data['info']
    number = data['number']
    info_and_number = zip(info, number)
    changed_data = product(id_, info_and_number)
    
    dict_data = [
    {
        'id': id_, 
        'info': info, 
        'number': number
    } for id_, (info, number) in changed_data]
    

    【讨论】:

    • 非常感谢您的帮助安德烈!当 'info' 多于一个时,['info1','info2'],我得到了额外的数据 {'id': 1, 'info': 'info2', 'number': 1}, {'id': 1, 'info': 'info2', 'number': 2}, 'number' 只属于对面的'info',我可以去掉那些多余的数据吗?
    • 我已经改变了答案。我认为它应该可以正常工作
    • 你拯救了我的一天!!!!非常感谢,如果我想把它保存到表中,你知道如何实现吗?实际上'number'是'info'的版本字段,'id'和'info'都是manytomanyfield,?
    • 你能给我看看你的模型吗?以及您要创建哪些模型?
    • 非常感谢您的回复,它有效,我做到了。哈哈,再次感谢,祝你和你的家人一切顺利,顺便欢迎来到中国
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2022-11-16
    相关资源
    最近更新 更多