繁体   English   中英

基于特定键的字典组列表并向其添加另一个值?

[英]Group list of dictionary based on particular key and add another value to it?

我有这样的字典列表

l = [
     {'vehicle': 708.75, 'general': None, 'salesperson': 'SAJANEESH'},
     {'vehicle': None, 'general': 1044.48, 'salesperson': 'SAJANEESH'},
     {'vehicle': None, 'general': 7035.0, 'salesperson': 'MATHEW'},
    ]

我正在尝试像这样更改字典的新列表。

预期产出

l = [
     {'vehicle': 708.75, 'general': 1044.48, 'salesperson': 'SAJANEESH'},
     {'vehicle': None, 'general': 7035.0, 'salesperson': 'MATHEW'},
    ]

我正在尝试将销售人员分组并为其添加一般价值或车辆价值。 我像这样尝试

import collections
res = collections.defaultdict(list) 
for i in l:
    for key, val in i.items(): 
        res[val].append(key) 
print(res)

但它显示错误的结果。有什么建议可以得到这个??

您可以简单地使用遍历数据结构

[root@cscale-82-69 python]# cat stck.py
l = [
     {'vehicle': 708.75, 'general': None, 'salesperson': 'SAJANEESH'},
     {'vehicle': None, 'general': 1044.48, 'salesperson': 'SAJANEESH'},
     {'vehicle': None, 'general': 7035.0, 'salesperson': 'MATHEW'},
    ]


y = []
for each in l:
 name = each['salesperson']
 count = 0
 for _ in y:
  if _['salesperson'] == name:
   count += 1
   for key, val in _.items():
    if _[key] == None:
     _[key] = each[key]
 if count == 0:
  y.append(each)

print (l)
print (y)
[root@cscale-82-69 python]# python stck.py
[{'general': 1044.48, 'salesperson': 'SAJANEESH', 'vehicle': 708.75}, {'general': 1044.48, 'salesperson': 'SAJANEESH', 'vehicle': None}, {'general': 7035.0, 'salesperson': 'MATHEW', 'vehicle': None}]
[{'general': 1044.48, 'salesperson': 'SAJANEESH', 'vehicle': 708.75}, {'general': 7035.0, 'salesperson': 'MATHEW', 'vehicle': None}]
[root@cscale-82-69 python]#

您可以将itertools.groupby用于唯一列表:

from itertools import groupby
from operator import itemgetter

key = itemgetter('vehicle')
print([next(v) for _, v in groupby(sorted(l, key=key), key=key)])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM