Python 删除值较低的列表中的重复词典

Python 删除值较低的列表中的重复词典,python,python-3.x,Python,Python 3.x,如何按值删除Python3列表中的重复字典 我有一个字典列表: data = [ {'number': 42804420, 'price': 1450, 'desc': 'aaa'}, {'number': 46279370, 'price': 11500, 'desc': 'bbb'}, # <-- same 'number' {'number': 46279370, 'price': 10000, 'desc': 'ccc'}, # <-- same

如何按值删除Python3列表中的重复字典

我有一个字典列表:

data = [
    {'number': 42804420, 'price': 1450, 'desc': 'aaa'},
    {'number': 46279370, 'price': 11500, 'desc': 'bbb'},  # <-- same 'number'
    {'number': 46279370, 'price': 10000, 'desc': 'ccc'},  # <-- same 'number'
    {'number': 42380410, 'price': 1400, 'desc': 'ddd'},
    {'number': 45547080, 'price': 1050, 'desc': 'aaa'},
    {'number': 46279370, 'price': 1800, 'desc': 'aaa'},   # <-- same 'number'
    {'number': 42074330, 'price': 2700, 'desc': 'bbb'}
]
数据=[
{'number':42804420,'price':1450,'desc':'aaa'},

{'number':46279370,'price':11500,'desc':'bbb'},#也许可以尝试使用pandas来处理这样的表格数据。 然后你可以做:

import pandas as pd

data = [
    {'number': 42804420, 'price': 1450, 'desc': 'aaa'},
    {'number': 46279370, 'price': 11500, 'desc': 'bbb'},  # <-- same 'number'
    {'number': 46279370, 'price': 10000, 'desc': 'ccc'},  # <-- same 'number'
    {'number': 42380410, 'price': 1400, 'desc': 'ddd'},
    {'number': 45547080, 'price': 1050, 'desc': 'aaa'},
    {'number': 46279370, 'price': 1800, 'desc': 'aaa'},   # <-- same 'number'
    {'number': 42074330, 'price': 2700, 'desc': 'bbb'}
]

df = pd.DataFrame(data)

df = df.sort_values(by=["price"], ascending=False)

df = df.drop_duplicates(subset = ["number"])
print(df)
将熊猫作为pd导入
数据=[
{'number':42804420,'price':1450,'desc':'aaa'},

{'number':46279370,'price':11500,'desc':'bbb'},#一个简单的python版本,只是因为我非常讨厌熊猫

内置的groupby不排序,所以我们先进行排序。排序首先输出最低的价格,所以我们选择最后一个以获得最高的价格

from itertools import groupby

data = [
    {'number': 42804420, 'price': 1450, 'desc': 'aaa'},
    {'number': 46279370, 'price': 11500, 'desc': 'bbb'},  # <-- same 'number'
    {'number': 46279370, 'price': 10000, 'desc': 'ccc'},  # <-- same 'number'
    {'number': 42380410, 'price': 1400, 'desc': 'ddd'},
    {'number': 45547080, 'price': 1050, 'desc': 'aaa'},
    {'number': 46279370, 'price': 1800, 'desc': 'aaa'},   # <-- same 'number'
    {'number': 42074330, 'price': 2700, 'desc': 'bbb'}
]

def get_sort_key(d):
    return (d['number'], d['price'])

def get_group_key(d):
    return d['number']

sorted_data = sorted(data, key=get_sort_key)

output = []
for number, items in groupby(sorted_data, get_group_key):
    output.append(list(items)[-1])
从itertools导入groupby
数据=[
{'number':42804420,'price':1450,'desc':'aaa'},
{'number':46279370,'price':11500,'desc':'bbb'},#不使用任何库的简单O(n)解决方案:

dataNoDups={}
对于数据中的d:
如果不是(数据节点中的d['number']或d['price']>dataNoDups[d['number']]['price']:
数据节点[d['number']]=d
打印(dataNoDups.values())#您的预期结果就在那里

谢谢!这很好,但它只保留第一个数值-不考虑价格。在删除重复项之前,您可以使用df.sort_值。检查我的编辑。顺便问一下,为什么我会被否决?这个否决票不是我这边的。例如,如果第一个数值较低,它只保留第一个数值例如,将有值为1111的46279370作为第一个字典ymy bad,忘记添加“ascending=False”,这使我们可以从最高价格到最低价格进行排序。没有它,它的价格从最低到最高,这就是为什么它保持1800美元在这种情况下,这看起来像是魅力,我会再次测试它,非常感谢!这是一个伟大的解决方案,非常有效,非常感谢您的时间,我真的很感激。唯一的一点,它将排序r结果颠倒了,但在这种情况下这不是问题。我会投票赞成,我会接受一个没有库的解决方案。谢谢!我想你可以反转
排序的\u数据。当然也取决于
数字的排序。这是没有库的最佳解决方案,它完全符合我的要求。谢谢非常感谢你的时间!
from itertools import groupby

data = [
    {'number': 42804420, 'price': 1450, 'desc': 'aaa'},
    {'number': 46279370, 'price': 11500, 'desc': 'bbb'},  # <-- same 'number'
    {'number': 46279370, 'price': 10000, 'desc': 'ccc'},  # <-- same 'number'
    {'number': 42380410, 'price': 1400, 'desc': 'ddd'},
    {'number': 45547080, 'price': 1050, 'desc': 'aaa'},
    {'number': 46279370, 'price': 1800, 'desc': 'aaa'},   # <-- same 'number'
    {'number': 42074330, 'price': 2700, 'desc': 'bbb'}
]

def get_sort_key(d):
    return (d['number'], d['price'])

def get_group_key(d):
    return d['number']

sorted_data = sorted(data, key=get_sort_key)

output = []
for number, items in groupby(sorted_data, get_group_key):
    output.append(list(items)[-1])