我的list
dictionaries
的格式类似于:
complete_list = [{'id': 1, 'mobile': '2345', 'name': 'ABC', 'other': 'ggg'}, {'id': 2, 'mobile': '2345', 'name': 'ABC', 'other': 'hhh'}, {'id': 3, 'mobile': '3456', 'name': 'XYZ', 'other': 'ggg'}]
我希望获得基于mobile
的唯一记录计数,类似于:
[{'mobile': '2345', 'name': 'ABC', 'rec_count': 2}, {'mobile': '3456', 'name': 'XYZ', 'rec_count': 1}]
我正在尝试以下代码:
unique_list = list({v.get('mobile', ''): v for v in complete_list}.values())
使用此代码,我可以获得唯一记录list
。但是也不知道如何计算。
有人可以解释一下如何做到这一点?
答案 0 :(得分:1)
如果您只想计算每个mobile
出现的次数,最简单的方法可能是Counter
from collections import Counter
complete_list = [{'id': 1, 'mobile': '2345', 'name': 'ABC', 'other': 'ggg'}, {'id': 2, 'mobile': '2345', 'name': 'ABC', 'other': 'hhh'}, {'id': 3, 'mobile': '3456', 'name': 'XYZ', 'other': 'ggg'}]
mobile_count = Counter(i['mobile'] for i in complete_list)
print(mobiles)
打印
Counter({'2345': 2, '3456': 1})
Counter
是一种特殊的dict
。阅读更多here
答案 1 :(得分:1)
您可以通过list
创建loop
个移动设备然后unique_list
来更新记录,如下所示:
complete_list = [{'id': 1, 'mobile': '2345', 'name': 'ABC', 'other': 'ggg'},
{'id': 2, 'mobile': '2345', 'name': 'ABC', 'other': 'hhh'},
{'id': 3, 'mobile': '3456', 'name': 'XYZ', 'other': 'ggg'}]
mobiles = [x['mobile'] for x in complete_list]
unique_list = list({v.get('mobile', ''): v for v in complete_list}.values())
for elem in unique_list:
elem['rec_count'] = mobiles.count(elem['mobile'])
print unique_list
输出:
[{'mobile': '2345', 'other': 'hhh', 'rec_count': 2, 'id': 2, 'name': 'ABC'}, {'mobile': '3456', 'other': 'ggg', 'rec_count': 1, 'id': 3, 'name': 'XYZ'}]
修改强>
更优化的方法是使用两个for-loops
来相应地更新list
,或者创建一个新的list
:
complete_list = [{'id': 1, 'mobile': '2345', 'name': 'ABC', 'other': 'ggg'},
{'id': 2, 'mobile': '2345', 'name': 'ABC', 'other': 'hhh'},
{'id': 3, 'mobile': '3456', 'name': 'XYZ', 'other': 'ggg'}]
for i, v in enumerate(complete_list):
rec_count = 1
for j, v2 in enumerate(complete_list):
if i != j and v['mobile'] == v2['mobile']:
rec_count += 1
del complete_list[j]
v['rec_count'] = rec_count
print complete_list
输出:
[{'mobile': '2345', 'other': 'ggg', 'rec_count': 2, 'id': 1, 'name': 'ABC'}, {'mobile': '3456', 'other': 'ggg', 'rec_count': 1, 'id': 3, 'name': 'XYZ'}]
如果您要创建新的list
,请移除del complete_list[j]
将记录附加到第一个list
loop
答案 2 :(得分:0)
您应该能够使用len(unique_list)
获取unique_list中的元素数量。我相信这是你要找的记录数。
另一个解决方案是使用for循环并设置数学来计算唯一移动数字的数量,而不创建唯一记录列表。
complete_list = [{'id': 1, 'mobile': '2345', 'name': 'ABC', 'other': 'ggg'},
{'id': 2, 'mobile': '2345', 'name': 'ABC', 'other': 'hhh'},
{'id': 3, 'mobile': '3456', 'name': 'XYZ', 'other': 'ggg'}]
mobile_numbers = set()
for record in complete_list:
mobile_numbers.add(record['mobile'])