Python根据字典中的其他项设置项值

问题描述 投票:0回答:4
A = {0:{a:1, b:7}, 1:{a:5,b:5}, 2:{a:4,b:6}}

我想根据每个子词典中所有guess的值b会计,将项目b's附加到每个子词典。

在词典A中说:

0-b-7 percentage of b:  7/(7+5+6)
1-b-5 percentage of b:  5/(7+5+6)
2-b-6 percentage of b:  1 - 7/(7+5+6) - 5/(7+5+6)

想要的词典应该是这样的

A = {0:{a:1, b:7, 'guess': 7/(7+5+6)}, 
     1:{a:5,b:5, 'guess':  5/(7+5+6)}, 
     2:{a:4,b:6, 'guess':  1 - 7/(7+5+6) - 5/(7+5+6)}}

我不知道如何将其他两个b's合并到一个特定的子字典中。

python dictionary
4个回答
1
投票

一种方法是预先计算所有bs的总和,然后使用它为您的字典添加新的键值对。

b_total = float(sum(A[k]['b'] for k in A))
for k in A:
    A[k]['guess'] = A[k]['b'] / b_total

#{0: {'a': 1, 'b': 7, 'guess': 0.3888888888888889},
# 1: {'a': 5, 'b': 5, 'guess': 0.2777777777777778},
# 2: {'a': 4, 'b': 6, 'guess': 0.3333333333333333}}

1
投票
A = {0:{"a":1, "b":7}, 1:{"a":5,"b":5}, 2:{"a":4,"b":6}}

char = "b"
denominator = 0

# =========================
# First Calculate the sum 
# =========================
for key in A:
  inner_map = A[key]
  denominator += inner_map[char]

# ========================================
# Now insert the new key to the inner_map
# ========================================
for key in A:
  inner_map = A[key]
  inner_map["guess"] = inner_map[char]/denominator

print(A)
  • 输出: {0: {'a': 1, 'b': 7, 'guess': 0.3888888888888889}, 1: {'a': 5, 'b': 5, 'guess': 0.2777777777777778}, 2: {'a': 4, 'b': 6, 'guess': 0.3333333333333333}}

0
投票

试试这个:

def add_calc(my_dict):
    total_guesses = sum(map(lambda x: my_dict.get(x).get('b'), my_dict))
    for item in my_dict.itervalues():
        item.update({'guess': 1.0 * item.get('b') / total_guesses})
    return my_dict

d = add_calc(A)

{0: {'a': 1, 'b': 7, 'guess': 0.3888888888888889},
 1: {'a': 5, 'b': 5, 'guess': 0.2777777777777778},
 2: {'a': 4, 'b': 6, 'guess': 0.3333333333333333}}

我在使用Python 2 btw,你没有指定版本


0
投票

您可以使用字典解包:

A = {0:{'a':1, 'b':7}, 1:{'a':5, 'b':5}, 2:{'a':4, 'b':6}}
results = {a:{**b, **{'guess':b['b']/float(sum(c['b'] for _, c in A.items()))}} for a, b in A.items()}

输出:

{0: {'guess': 0.3888888888888889, 'b': 7, 'a': 1}, 1: {'guess': 0.2777777777777778, 'b': 5, 'a': 5}, 2: {'guess': 0.3333333333333333, 'b': 6, 'a': 4}}
© www.soinside.com 2019 - 2024. All rights reserved.