我在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'
。任何正确方向的指针?
答案 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