【发布时间】:2011-01-05 06:35:06
【问题描述】:
Python 新手在这里寻求帮助...
对于 Python 列表中可变数量的字典,例如:
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'},
]
我正在尝试找到对键“id”的值相等的字典进行分组的最佳方法,然后添加/合并任何唯一的 key:value 并创建一个新的字典列表,例如:
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'},
]
到目前为止,我已经弄清楚了如何将列表中的字典分组:
myList = itertools.groupby(list_dicts, operator.itemgetter('id'))
但我正在为如何构建新的字典列表而苦苦挣扎:
1) 将额外的键和值添加到具有相同“id”的第一个 dict 实例
2) 为“item”和“price”键设置新名称(例如“item1”、“item2”、“item3”)。这对我来说似乎很笨拙,有没有更好的方法?
3) 循环遍历每个“id”匹配以构建一个字符串供以后输出
我选择返回一个新的字典列表只是因为将字典传递给模板函数很方便,在该函数中通过描述性键设置变量很有帮助(有很多变量)。如果有更简洁更简洁的方法来实现这一点,我会很想学习。再说一次,我对 Python 还是很陌生,并且在使用这样的数据结构。
【问题讨论】:
标签: python list merge dictionary