V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
QGabriel
V2EX  ›  Python

Python 去重问题

  •  
  •   QGabriel · 2022-06-20 10:36:38 +08:00 · 2593 次点击
    这是一个创建于 668 天前的主题,其中的信息可能已经有所发展或是发生改变。
    list1 = [{b: 1, c: 2}, {b: 2, c: 3}, {b: 3, c: 4},{b: 2, c: 1}]
    list2 = [{a: 1, d: 0.1},{a: 2, d: 0.1},{a: 3, d: 0.2},{a: 4, d: 0.3},{a: 5, d: 0.1},{a: 6, d: 0.1}]

    list1 和 list2 都是 DataFrame.

    问题 1: list1 怎么把{b: 2, c: 1}这种数据范围重复的值去掉?
    问题 2: 把 list2 中符合(a>=b and a <= b)的 d 字段 value 相加赋值给 list1[0]['d']


    各位大佬帮忙解答一下或提供思路 谢谢了
    7 条回复    2022-06-24 00:32:06 +08:00
    dier
        1
    dier  
       2022-06-20 10:59:16 +08:00
    Python 小白来试着回复一下
    问题 1 ,你列出来的并不是重复内容呀。还是说你只想在 list1 中只保留一个 b,c 的字典?

    问题 2 ,你这个判断条件不成立呀,a 怎么可能同时大于等于 b 又小于等于 b?
    QGabriel
        2
    QGabriel  
    OP
       2022-06-20 11:03:34 +08:00
    @dier 可能我没表达明白~
    问题 1 => list1 中 {b: 1, c: 2} 和 {b: 2, c: 1} 这两个对象的 value 在同一个区间范围 我就算他是重复的~
    问题 2 => list2 中的 a 如果在 list1 中的某个对象 b-c 的区间范围 就把符合条件 list2 的对象中的 d 值相加
    enrolls
        3
    enrolls  
       2022-06-20 11:17:43 +08:00
    问题 1 ,dict 转 tuple?
    QGabriel
        4
    QGabriel  
    OP
       2022-06-20 11:25:42 +08:00
    @enrolls 嗯 是个思路 谢谢
    InvincibleDream
        5
    InvincibleDream  
       2022-06-20 11:41:28 +08:00
    放进一个 set 里就没有重复的了
    RyanLin1995
        6
    RyanLin1995  
       2022-06-22 11:05:23 +08:00
    nyxsonsleep
        7
    nyxsonsleep  
       2022-06-24 00:32:06 +08:00
    问了两个问题,楞是没有一个问题是直接描述正确的。。。唯一明白人还只有#1
    Q1:等于是构造了一个数据结构
    A1:数据结构是不能像描述的那样判断重复的,所以要么重构数据结构要么重写=运算符。
    具体而言很简单,遍历 list ,b c 交换值形成新的 dict 子元素,再做一重遍历与其他的子元素做对比。相等则重复。
    经典两重循环条件判断查重。
    Q2:重点是筛选符合条件的 list2 中的子元素。不会有人连取 value 和赋值都不会的吧。
    A2:直观来说,筛选不就是遍历吗?遍历完了,就该求和了,结果显而易见。
    想用点内置函数就用 filter 函数做筛选,reduce 函数求和。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1107 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:44 · PVG 02:44 · LAX 11:44 · JFK 14:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.