首页 > 解决方案 > 只比较字典中的两个值

问题描述

我试图找到一个解决方案,通过仅比较 2 个值来找出字典中哪些项目是双倍的。在我的情况下,“键”和“单元格”。顺序应该是首先在键中比较值,然后在单元格中比较值。

源字典

{
1: {    Name: 'item1', Cell: 'DC01', key: 'R12'  }, 
2: {    Name: 'item2', Cell: 'DC02', key: 'R12'  }, 
3: {    Name: 'item3', Cell: 'DC03', key: 'R13'  }, 
4: {    Name: 'item4', Cell: 'DC02', key: 'R12'  }, 
5: {    Name: 'item5', Cell: 'DC05', key: 'R15'  }  
}

输出应该是:

{
1: {    Name: 'item1', Cell: 'DC01', key: 'R12', answ :  'false' }, 
2: {    Name: 'item2', Cell: 'DC02', key: 'R12'  answ :  'true' }, 
3: {    Name: 'item3', Cell: 'DC03', key: 'R13'  answ :  'false' }, 
4: {    Name: 'item4', Cell: 'DC02', key: 'R12'  answ :  'true' }, 
5: {    Name: 'item5', Cell: 'DC05', key: 'R15'  answ :  'false' }  
}

问题是从性能的角度来看,最好的方法是什么。

标签: python-3.xdictionary

解决方案


代码:

x = {\
1: {    "Name": 'item1', "Cell": 'DC01', "key": 'R12'  },\
2: {    "Name": 'item2', "Cell": 'DC02', "key": 'R12'  },\
3: {    "Name": 'item3', "Cell": 'DC03', "key": 'R13'  },\
4: {    "Name": 'item4', "Cell": 'DC02', "key": 'R12'  },\
5: {    "Name": 'item5', "Cell": 'DC05', "key": 'R15'  }  
}
result = {}
key_set = set()
cell_set = set()
i = 0
for _,item in x.items():
    if item["key"] in key_set or item["Cell"] in cell_set:
        item.update({"answ":"true"})
    else:
        item.update({"answ":"false"})
    i+=1
    result.update({i:item})
    key_set.add(item["key"])
    cell_set.add(item["Cell"])
print(result)

结果:

{
1: {'Name': 'item1', 'Cell': 'DC01', 'key': 'R12', 'answ': 'false'}, 
2: {'Name': 'item2', 'Cell': 'DC02', 'key': 'R12', 'answ': 'true'}, 
3: {'Name': 'item3', 'Cell': 'DC03', 'key': 'R13', 'answ': 'false'}, 
4: {'Name': 'item4', 'Cell': 'DC02', 'key': 'R12', 'answ': 'true'}, 
5: {'Name': 'item5', 'Cell': 'DC05', 'key': 'R15', 'answ': 'false'}
}

推荐阅读