Reputation: 416
I try to find a solution to find out what items are double in the dict by comparing only 2 values. In my case "key" and "Cell". The sequence should be first the values should be compared in key and after the values in Cell.
the source dict
{
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' }
}
the output should be:
{
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' }
}
The question is what are the best way also from performance perspective.
Upvotes: 0
Views: 30
Reputation: 2518
code:
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)
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'}
}
Upvotes: 1
Reputation: 195543
If I understand you correctly, you want to find duplicates in your dictionary ("Cell", "key"):
dct = {
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"},
}
seen = {}
for d in dct.values():
seen.setdefault((d["Cell"], d["key"]), 0)
seen[(d["Cell"], d["key"])] += 1
for d in dct.values():
d["answer"] = seen[(d["Cell"], d["key"])] > 1
print(dct)
Prints:
{
1: {"Name": "item1", "Cell": "DC01", "key": "R12", "answer": False},
2: {"Name": "item2", "Cell": "DC02", "key": "R12", "answer": True},
3: {"Name": "item3", "Cell": "DC03", "key": "R13", "answer": False},
4: {"Name": "item4", "Cell": "DC02", "key": "R12", "answer": True},
5: {"Name": "item5", "Cell": "DC05", "key": "R15", "answer": False},
}
Upvotes: 1