我是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)
任何帮助将不胜感激
谢谢
答案 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: