小编abr*_*brg的帖子

python的dicts列表如何合并键:值相同的值?

Python newb在这里寻求一些帮助......

对于python列表中可变数量的dicts,如:

list_dicts = [
{'id':'001', 'name':'jim', 'item':'pencil', 'price':'0.99'},
{'id':'002', 'name':'mary', 'item':'book', 'price':'15.49'},
{'id':'002', 'name':'mary', 'item':'tape', 'price':'7.99'},
{'id':'003', 'name':'john', 'item':'pen', 'price':'3.49'},
{'id':'003', 'name':'john', 'item':'stapler', 'price':'9.49'},
{'id':'003', 'name':'john', 'item':'scissors', 'price':'12.99'},
]
Run Code Online (Sandbox Code Playgroud)

我正在尝试找到将键"id"的值相等的分组的最佳方法,然后添加/合并任何唯一键:value并创建一个新的dicts列表,如:

list_dicts2 = [
{'id':'001', 'name':'jim', 'item1':'pencil', 'price1':'0.99'},
{'id':'002', 'name':'mary', 'item1':'book', 'price1':'15.49', 'item2':'tape', 'price2':'7.99'},
{'id':'003', 'name':'john', 'item1':'pen', 'price1':'3.49', 'item2':'stapler', 'price2':'9.49', 'item3':'scissors', 'price3':'12.99'},
]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经想出如何将列表中的dicts分组为:

myList = itertools.groupby(list_dicts, operator.itemgetter('id'))
Run Code Online (Sandbox Code Playgroud)

但我正在努力构建新的dicts列表:

1)将额外的键和值添加到具有相同"id"的第一个dict实例

2)为"item"和"price"键设置新名称(例如"item1","item2","item3").这对我来说似乎很笨拙,还有更好的方法吗?

3)遍历每个"id"匹配以构建一个字符串以便以后输出

我选择返回一个新的dicts列表只是因为将dict传递给模板函数的便利性,其中通过描述性键设置变量是有帮助的(有很多变量).如果有更简洁的方法来实现这一点,我很想学习.同样,我对Python和处理这样的数据结构都很陌生.

python merge dictionary list

9
推荐指数
1
解决办法
7517
查看次数

标签 统计

dictionary ×1

list ×1

merge ×1

python ×1