用字典拆分元组

Tuple splitting with dictionaries

这是我目前拥有的词典。

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}}
  }

我正在寻找的输出如下:

{'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)}}}

我基本上希望位置是我们添加它们的概率 (prob) 的区间。

我能够想出这段代码,但是 poll2 的位置不是以 poll1 位置末尾的概率开始的。

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'])

这个输出是:

{'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)}}}

我希望能够通过多个民意调查来做到这一点,所以如果这是一个普遍的答案,我将不胜感激。非常感谢您的帮助,如果您还有其他问题或者我解释的不清楚,请告诉我。

迭代艺术。

为每个艺术创作index_prob = 0

然后迭代此艺术中的民意调查并将概率添加到 index_probs,同时还将 position key-value 添加到民意调查值

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']