Home > Mobile >  Tuple splitting with dictionaries
Tuple splitting with dictionaries

Time:02-08

This is the dictionary that I currently have.

d={'art1':{'poll1':{'v':10, 'i':9, 'r':9/10, 'prob': 0.9},'poll2':{'v':8, 'i':3, 'r':3/8, 'prob': 0.1}},
   'art2':{'poll1':{'v':11, 'i':4, 'r':4/11, 'prob': 0.4},'poll2':{'v':4, 'i':2, 'r':2/4, 'prob': 0.6}}
  }

And the output that I am looking for is the following:

{'art1': {'poll1': {'v': 10,
   'i': 9,
   'r': 0.9,
   'prob': 0.9,
   'position': (0, 0.9)},
  'poll2': {'v': 8, 'i': 3, 'r': 0.375, 'prob': 0.1, 'position': (0.9, 1.0)}},
 'art2': {'poll1': {'v': 11,
   'i': 4,
   'r': 0.36363636363636365,
   'prob': 0.4,
   'position': (0, 0.4)},
  'poll2': {'v': 4, 'i': 2, 'r': 0.5, 'prob': 0.6, 'position': (0.4, 0.6)}}}

I basically want the position to be an interval where we add their probabilities (prob).

I was able to come up with this chunk of code, but the position from poll2 does not start with the probability at the end of poll1 position.

for article, v in d.items():
    a=0
    print(d[article])
    print(v)
    for k,values in v.items():
        a =values['prob']
        if k=='poll1':
            values['position']=(0,values['prob'])
        else:
            values['position']=(a,a values['prob'])

The output for this is:

{'art1': {'poll1': {'v': 10,
   'i': 9,
   'r': 0.9,
   'prob': 0.9,
   'position': (0, 0.9)},
  'poll2': {'v': 8, 'i': 3, 'r': 0.375, 'prob': 0.1, 'position': (1.0, 1.1)}},
 'art2': {'poll1': {'v': 11,
   'i': 4,
   'r': 0.36363636363636365,
   'prob': 0.4,
   'position': (0, 0.4)},
  'poll2': {'v': 4, 'i': 2, 'r': 0.5, 'prob': 0.6, 'position': (1.0, 1.6)}}}

I was hoping to be able to do this with multiple polls, so I would really appreciate if it was a generalized answer. Thank you so much for your help, and if you have any other question or if what I explained isn't clear please let me know.

CodePudding user response:

Iterate over arts.

For each art create index_prob = 0

Then iterate over polls in this art and add prob to index_probs while also adding position key-value to poll values

for art, polls in d.items():
    index_prob = 0
    for poll, value in polls.items():
        value['position'] = (index_prob, index_prob   value['prob'])
        index_prob  = value['prob']
  •  Tags:  
  • Related