获取包含具有最大值的列表的列表

2024-05-23 02:13:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有坐标和其他参数的列表。我必须制作一个新的列表或编辑具有最大参数的重复坐标的初始列表。 例如:

list = [

[(34.5464,58.3435),35]
[(34.5464,58.3435),17]
[(34.5464,58.3435),23]
[(36.6575,62.6545),89]
[(31.2101,45.9789),2]
[(31.2101,45.9789),12]
[(37.5462,48.7521),78]

]

我需要这个:

list_dub_max = [

[(34.5464,58.3435),35]
[(31.2101,45.9789),12]

]

Tags: 编辑列表参数dubmaxlist
2条回答

像这样使用dict

>>> data = [[(34.5464, 58.3435), 35], [(34.5464, 58.3435), 17], [(34.5464, 58.3435), 23], [(36.6575, 62.6545), 89], [(31.2101, 45.9789), 2], [(31.2101, 45.9789), 12], [(37.5462, 48.7521), 78]]
>>> result={}
>>> for t,v in data:
    x = result.get(t)
    if x:
        if x<v: result[t]=v
    else:
        result[t] = v


>>> result = result.items()
>>> result
[((37.5462, 48.7521), 78), ((31.2101, 45.9789), 12), ((36.6575, 62.6545), 89), ((34.5464, 58.3435), 35)]

如果你需要有listlist而不是listtuple(如上所述),你可以这样做(和其他答案一样):

result = [[k,v] for k,v in result.iteritems()]

这应该做到:

def getFilteredList(l):
    list_dub_max = {}
    for val in l:
        if (val[0] in list_dub_max and list_dub_max[val[0]] < val[1]) or val[0] not in list_dub_max:
             list_dub_max[val[0]] = val[1]
    return [[k,v] for k,v in list_dub_max.iteritems()]

其中l是您的list

l = [
[(34.5464,58.3435),35],
[(34.5464,58.3435),17],
[(34.5464,58.3435),23],
[(36.6575,62.6545),89],
[(31.2101,45.9789),2],
[(31.2101,45.9789),12],
[(37.5462,48.7521),78],
]

相关问题 更多 >

    热门问题