python去重,一个由dict组成的list的去重示例

yipeiwu_com6年前Python基础

背景:有一个list,里面的每一个元素都是dict,根据某一个key进行去重,在这里,key代表question

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# created by fhqplzj on 2017/12/07 上午11:38
from itertools import groupby
from operator import itemgetter
 
import pandas as pd
 
 
def distinct(items):
  questions = map(itemgetter('question'), items)
  df = pd.DataFrame({
    'items': items,
    'questions': questions
  })
  return df.drop_duplicates(['questions'])['items'].tolist()
 
 
def distinct2(items):
  exist_questions = set()
  result = []
  for item in items:
    question = item['question']
    if question not in exist_questions:
      exist_questions.add(question)
      result.append(item)
  return result
 
 
def distinct3(items):
  key = itemgetter('question')
  items = sorted(items, key=key)
  return [next(v) for _, v in groupby(items, key=key)]
 
 
def distinct4(items):
  from itertools import compress
  mask = (~pd.Series(map(itemgetter('question'), items)).duplicated()).tolist()
  return list(compress(items, mask))
 
 
if __name__ == '__main__':
  data = [
    {'question': 'a', 'ans': 'b'},
    {'question': 'b', 'ans': 'd'},
    {'question': 'a', 'ans': 'p'},
    {'question': 'b', 'ans': 'e'}
  ]
  print distinct4(data)

以上这篇python去重,一个由dict组成的list的去重示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

Python线程池模块ThreadPoolExecutor用法分析

本文实例讲述了Python线程池模块ThreadPoolExecutor用法。分享给大家供大家参考,具体如下: python3内置的有Threadingpool和ThreadPoolEx...

Python字符编码判断方法分析

本文实例讲述了Python字符编码判断方法。分享给大家供大家参考,具体如下: 方法一: isinstance(s, str) 用来判断是否为一般字符串 isinstance(s, uni...

pygame实现打字游戏

pygame实现打字游戏

本文实例为大家分享了pygame实现打字游戏的具体代码,供大家参考,具体内容如下 1.基本代码 下面的代码完成了每一秒在界面的顶部随机生成一个新的字母 # -*- coding=ut...

使用Python串口实时显示数据并绘图的例子

使用Python串口实时显示数据并绘图的例子

使用pyserial进行串口传输 一、安装pyserial以及基本用法 在cmd下输入命令pip install pyserial 注:升级pip后会出现 "‘E:\Anaconda3\...

Pycharm导入Python包,模块的图文教程

Pycharm导入Python包,模块的图文教程

1、点击File->settings 2、选择Project Interpreter,点击右边绿色的加号添加包 3、输入你想添加的包名,点击Install Package 4...