如何从python中的字典列表中获取重复值

时间:2019-03-15 11:29:47

标签: python python-3.x

我是python的新手,正在尝试从字典列表中分离重复的键。在下面找到列表

dataList = [{'Key': 'US', 'Val': 'NewYork'},
 {'Key': 'Aus', 'Val': 'Sydney'}, 
 {'Key': 'US', 'Val': 'Washington'}, 
 {'Key': 'Ind', 'Val': 'Delhi'}, 
 {'Key': 'Fra', 'Val': 'Paris'},
 {'Key': 'Ind', 'Val': 'Chennai'}]

我想获取重复的键及其值

预期结果

duplicates = [{'Key': 'Ind', 'Val': 'Delhi'},{'Key': 'Ind', 'Val': 'Chennai'},{'Key': 'US', 'Val': 'NewYork'},{'Key': 'US', 'Val': 'Washington'}]
nonduplicate = [{'Key': 'Aus', 'Val': 'Sydney'},{'Key': 'Fra', 'Val': 'Paris'}]

在我的示例代码下面找到,它没有给我想要的输出

uniqueValues = []
duplicateValues = []
# Creating a list of all duplicate values in dictionary
for attribute in dataList:
    for k, v in attribute.items():
        if v not in uniqueValues :
            uniqueValues.append(v)
        else:    
            duplicateValues.append(v)

任何帮助将不胜感激

谢谢

1 个答案:

答案 0 :(得分:2)

您的字典不是一个整体上的重复项,而是仅根据Key的值将它们定义为唯一的,因此v not in uniqueValues在用{{ 1}}。

请注意,即使{'Key': 'US', 'Val': 'NewYork'}是正确的测试,您也已经将{'Key': 'US', 'Val': 'Washington'}添加到v not in uniqueValues,并且必须再次将其删除并将其移至{{1} }一旦找到证明是重复的证据。

相反,要将字典分为两个存储区,您需要先计算{'Key': 'US', 'Val': 'NewYork'} ,以便知道是否只有一个或多个给定值:

uniqueValues

不要试图跳过计数循环,虽然您也可以在duplicateValues循环中对'Key'值进行计数,但是您要为重复的键重复该计数几次,您将不得不为from collections import Counter key_counts = Counter(d['Key'] for d in dataList) uniqueValues = [] duplicateValues = [] for d in dataList: if key_counts[d['Key']] == 1: uniqueValues.append(d) else: duplicateValues.append(d) 中的每个项目遍历d['Key']的所有内容,从而使代码工作量二次Big O notation中的O(N ^ 2)。通过首先计数 ,工作量只会线性增长,即O(N)。

演示:

for d in dataList: