如何从列表中删除重复项并从中获取最大值

时间:2015-04-15 11:53:31

标签: python

我在python中有以下dicts列表

[{'JP': ['Server2', 'Server1', 'Server3']}, {'JP': ['Server2', 'Server1']}, {'JP': ['Server2', 'Server1']}, {'JP': ['Server2', 'Server1']}, {'JP': ['Server1']}, {'JP': ['Server1']}, {'JP': ['Server1']}, {'JP': ['Server2', 'Server1']}, {'JP': ['Server2', 'Server1']}, {'JP': ['Server2', 'Server1']}, {'JP': ['Server2', 'Server1']}, {'JP': ['Server2', 'Server1']}]

我想要从这些中删除重复项,然后取出最大值列表。在上面的例子中,我的输出将是

[{'JP': ['Server2', 'Server1', 'Server3']}]

删除我正在尝试的重复项。

result = [dict(t) for t in set([tuple(d.items()) for d in result])]

它给了我错误unhashable type: 'list'。任何正确方向的指针?

2 个答案:

答案 0 :(得分:2)

我在这里对你的字典做出假设,但是如果

x = [{'JP': ['Server2', 'Server1', 'Server3']}, {'JP': ['Server2', 'Server1']}, {'JP': ['Server2', 'Server1']}, {'JP': ['Server2', 'Server1']}, {'JP': ['Server1']}, {'JP': ['Server1']}, {'JP': ['Server1']}, {'JP': ['Server2', 'Server1']}, {'JP': ['Server2', 'Server1']}, {'JP': ['Server2', 'Server1']}, {'JP': ['Server2', 'Server1']}, {'JP': ['Server2', 'Server1']}]

x.sort(key = lambda x:len(x['JP']))

然后

x[-1]将是你想要的。

更新: 借用Marco Bonelli的回答,你不必对数组进行实际排序。你可以简单地找到最大的"像这样。

 max(x, key = lambda x:len(x['JP']))

答案 1 :(得分:1)

这个怎么样?很容易看出它如何易于修改:)

data = [{'JP': ['Server2', 'Server1', 'Server3']},
        {'JP': ['Server2', 'Server1']},
        {'JP': ['Server2', 'Server1']},
        {'JP': ['Server2', 'Server1']},
        {'JP': ['Server1']},
        {'JP': ['Server1']},
        {'JP': ['Server1']},
        {'JP': ['Server2', 'Server1']},
        {'JP': ['Server2', 'Server1']},
        {'JP': ['Server2', 'Server1']},
        {'JP': ['Server2', 'Server1']},
        {'JP': ['Server2', 'Server1']}]

result = dict()
for dict_ in data:
    for key, values in dict_.iteritems():
        if len(values) > len(result.get(key, [])):
            result[key] = values