我有一个默认的dict,如下所示:
my_dict = default(dict, {"K": {"k": 2, "x": 1.0}, "S": {"_":1.0, "s":1}, "EH": {"e":1.0}})
键是音素,字典本身的值是字形,它们出现一定次数,这是默认字典中的相应数字。
该函数应该返回另一个包含概率的默认dict,如下所示:
defaultdict(<class 'dict'>, {'EH': {'e': 1.0}, 'K': {'k': 0.6666666666666666, 'x': 0.3333333333333333}, 'S': {'_': 0.5, 's': 0.5}})
'e'保持不变,1.0 / 1 = 1.0。 'K'的值为0.66666和0.33333,因为2/3 = 0.66666和1/3 = 0.3333333。 'S'的值为0.5和0.5,因为每个值的1/2为0.5。返回词典中的概率必须总是为1。
到目前为止,我有这个:from collections import defaultdict
my_dict = default(dict, {"K": {"k": 2, "x": 1.0}, "S": {"_":1.0, "s":1}, "EH": {"e":1.0}})
def dict_probability(my_dict):
return_dict = defaultdict(dict)
for key, value in my_dict.items():
for k, v in values.items():
我还想让它适用于默认的dict,如下所示:
dict_two = defaultdict(dict, {('EH', 't'): {'e': 2}, ('N', 'e'): {'ne': 1, 'n': 2}})
哪些键中只包含字符,我希望它们只返回相同的字符。
我只是不确定如何正确地做到这一点任何帮助都会受到赞赏。
我每次调用函数时都想这样做:
>>>my_dict = default(dict, {"K": {"k": 2, "x": 1.0}, "S": {"_":1.0, "s":1}, "EH": {"e":1.0}})
>>>dict_probability(my_dict)
>>>print(m_dict)
defaultdict(<class 'dict'>, {'EH': {'e': 1.0}, 'K': {'k': 0.6666666666666666, 'x': 0.3333333333333333}, 'S': {'_': 0.5, 's': 0.5}})
我希望dict_probability函数也返回None
答案 0 :(得分:1)
你基本上想要对值求和,然后除以每个子键的各个值。
result = defaultdict(dict)
for bigkey, d in yourdict.values():
# bigkey="K", d={"k": 2, "x": 1.0}, ...
total = sum(d.values())
# d.values() == [2, 1.0]
for k,v in d.items():
# k="k", v=2, ...
result[bigkey][k] = v / total
# result["K"]["k"] = 3 / 2
如果你不考虑未来的程序员,这可以在一个非常丑陋的dict comp中完成。
result = defaultdict(dict).update({bigkey: {k: v / sum(d.values()) for k,v in d.items()} for bigkey,d in yourdict.items()})