Mar-09-2023, 05:42 PM
I want to one group where all values are with 30% of each other.
working code is follows :
working code is follows :
from itertools import combinations def pctDiff(A,B): return abs(A-B)*200/(A+B) def main(): dict2={} dict ={'acct_number':10202,'acct_name':'abc','v1_rev':3000,'v2_rev':4444,'v4_rev':234534,'v5_rev':5665,'v6_rev':66,'v7_rev':66,'v3_rev':66} vendors_revenue_list =['v1_rev','v2_rev','v3_rev','v4_rev','v5_rev','v6_rev','v7_rev','v8_rev'] #prepared list of vendors for k in vendors_revenue_list: if k in dict.keys(): dict2.update({k: dict[k]}) print(dict2) #provides all possible combination for a, b in combinations(dict2, 2): groups = [(a,b) for a,b in combinations(dict2,2) if pctDiff(dict2[a],dict2[b]) <= 30] print(groups)
Output:{'v1_rev': 3000, 'v2_rev': 4444, 'v3_rev': 66, 'v4_rev': 234534, 'v5_rev': 5665, 'v6_rev': 66, 'v7_rev': 66}
[('v2_rev', 'v5_rev'), ('v3_rev', 'v6_rev'), ('v3_rev', 'v7_rev'), ('v6_rev', 'v7_rev')]
desired output Output:[('v2_rev', 'v5_rev'), ('v3_rev', 'v6_rev','v7_rev')]