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

背景:有一个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的去重示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python: 判断tuple、list、dict是否为空的方法

    Test tuple_test = () assert not tuple_test list_test = [] assert not list_test dict_test = {} assert not dict_test Summary 根据实验结果可知,直接通过: if not xxx: 即可判断 tuple.list.dict 是否 为空 . 以上这篇python: 判断tuple.list.dict是否为空的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支

  • Python 按字典dict的键排序,并取出相应的键值放于list中的实例

    方法一: def dict_to_numpy_method1(dict): dict_sorted=sorted(dict.iteritems(), key=lambda d:d[0]) results=[value for key,value in dict_sorted] 方法二: def dict_to_numpy_method2(dict): keys=dict.keys() keys.sort() results=[dic[key] for key in keys] 方法三: def

  • python 实现将字典dict、列表list中的中文正常显示方法

    在代码文件中定义中文时,经常会遇到问题,要么编码错误,要么是无法正常打印显示. 例如,dict_chinese.py: #!/usr/bin/python a={'name': 'fengshou'} b={'name': "丰收"} print "a=", a print "b=", b 问题1 执行,查看结果 $ python dict_chinese.py File "dict_chinese.py", line 5 S

  • 对Python3中dict.keys()转换成list类型的方法详解

    在python3中使用dict.keys()返回的不在是list类型了,也不支持索引,我们可以看一下下面这张图片 那么我们应该怎么办呢,其实解决的方法也是非常简单的,只需要使用list()就可以了,可以看下面的代码 list(dict.keys()) 我们可以看一下下面这张图片,现在就支持索引了 以上这篇Python3中dict.keys()转换成list类型就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • python里dict变成list实例方法

    python里dict(字典)怎么变成list(列表)? 说明:列表不可以转换为字典 1.转换后的列表为无序列表 a = {'a' : 1, 'b': 2, 'c' : 3} #字典中的key转换为列表 key_value = list(a.keys()) print('字典中的key转换为列表:', key_value) #字典中的value转换为列表 value_list = list(a.values()) print('字典中的value转换为列表:', value_list) 运行结果

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

    背景:有一个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): q

  • Python中一个for循环循环多个变量的示例

    首先,熟悉一个函数zip,如下是使用help(zip)对zip的解释. Help on built-in function zip in module __builtin__: zip(...) zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)] Return a list of tuples, where each tuple contains the i-th element from each of the argumen

  • Python判断一个三位数是否为水仙花数的示例

    如下所示: daffodil = int(input('请输入一个三位数:')) if daffodil == pow(daffodil // 100 , 3) + pow(daffodil % 10 , 3) + pow(daffodil // 10 % 10, 3): print("这是一个水仙花数%d" % daffodil) else: print("这不是一个水仙花数%d" % daffodil) 以上这篇Python判断一个三位数是否为水仙花数的示例就是

  • 用Python画一个LinkinPark的logo代码实例

    这篇文章主要介绍了用Python画一个LinkinPark的logo代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 # -*- coding: UTF-8 -*- from turtle import * width(17) right(25) circle(150,200,20) left(65) forward(240) left(120) forward(195) left(120) forward(135) left(

  • Python自定义一个类实现字典dict功能的方法

    如下所示: import collections class Mydict(collections.UserDict): def __missing__(self, key): if isinstance(key, str): raise KeyError(key) return self[str(key)] def __contains__(self, key): return str(key) in self.data def __setitem__(self, key, item): se

  • 基于Python制作一个文件去重小工具

    目录 前言 实现步骤 补充 前言 常常在下载网络素材时有很多的重复文件乱七八糟的,于是想实现一个去重的操作. 主要实现思路就是遍历出某个文件夹包括其子文件夹下面的所有文件,最后,将所有文件通过MD5函数的对比筛选出来,最后将重复的文件移除. 实现步骤 用到的第三方库都比较的常见,其中只有hashlib是用来对比文件的不是很常见.其他的都是一些比较常见的第三方库用来做辅助操作. import os # 应用文件操作 import hashlib # 文件对比操作 import logging #

  • 用Python编写一个简单的FUSE文件系统的教程

    如果你是我的长期读者,那么你应该知道我在寻找一个完美备份程序,最后我写了一个基于bup的我自己的加密层. 在写encbup的时候,我对仅仅恢复一个文件就必须要下载整个巨大的档案文件的做法不甚满意,但仍然希望能将EncFS和 rdiff-backup一起使用来实现可远程挂载.加密.去重.版本化备份的功能. 再次试用obnam 后(啰嗦一句:它还是慢的出奇),我注意到了它有一个mount命令.深入研究后,我发现了fuse-python和fusepy,感觉用Python写一个FUSE文件系统应该挺简单

  • 解决python中set与dict的无序问题

    每个熟悉python的人都知道,python提供给了我们各种各样原生的数据结构,如list.tuple.set.dict等等.这些形形色色的数据结构为我们程序猿提供了业务支持.但是要用好这些对象,可就要理解这些结构的特点. 比如简单的区分:可变与不可变.有序与无序. 那么本文就想和大家分享一下,这个无序中的细节. 在开始之前,本蟒蛇严重申明,集合和字典是无序的!!集合和字典是无序的!!集合和字典是无序的!!不要看完本蛇说完,然后得到了什么奇奇怪怪的结论!本文基于python3.6进行讲解,什么你

  • python统计一个文本中重复行数的方法

    本文实例讲述了python统计一个文本中重复行数的方法.分享给大家供大家参考.具体实现方法如下: 比如有下面一个文件 2 3 1 2 我们期望得到 2,2 3,1 1,1 解决问题的思路: 出现的文本作为key, 出现的数目作为value,然后按照value排除后输出 最好按照value从大到小输出出来,可以参照: 复制代码 代码如下: in recent Python 2.7, we have new OrderedDict type, which remembers the order in

  • Python中字典(dict)合并的四种方法总结

    本文主要给大家介绍了关于Python中字典(dict)合并的四种方法,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍: 字典是Python语言中唯一的映射类型. 映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表. 字典对象是可变的,它是一个容器类型,能存储任意个数的Python对象,其中也可包括其他容器类型. 字典类型与序列类型的区别: 1. 存取和访问数据的方式不同. 2. 序列类型只用数字类型的键(从序列的开始按数值顺序索引

随机推荐