用字典拆分元组
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']
这是我目前拥有的词典。
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']