访问嵌套字典中的值

时间:2016-05-02 13:17:33

标签: python-3.x dictionary nested key

我正在尝试编写一个函数:

  1. 计算"子键的数量"一把钥匙(例如' e'是' M'的子钥匙)
  2. 将每个子密钥的概率除以该密钥的子密钥总数
  3. 修改数字。
  4. 但是,我的功能必须返回。 例如,如果我有字典:

    defaultdict(dict, {'M': {'e': 1.0}, 'O': {'n': 2, 'x': 1.0}, 'I': {'_': 1.0, 's': 1}, 'P': {'t': 3}, 'L': {'ne': 1, 'n': 1.0}})
    

    因此,对于示例字典,转换后的字典输出将为:

    defaultdict(<class 'dict'>, {'M': {'e': 1.0}, 'O': {'n': 0.6666666666666666, 'x': 0.3333333333333333}, 'I': {'_': 0.5, 's': 0.5}, 'P': {'t': 1.0}, 'L': {'ne': 0.5, 'n': 0.5}})
    

    另一个例子,如果我有字典:

    defaultdict(dict, {('H', 't'): {'m': 2}, ('M', 'o'): {'ce': 1, 'p': 2}, ('K', '^'): {'d': 2}, ('F', 'x'): {'_': 1, 'g': 3}, ('J', 'o'): {'y': 1}, ('A', 'b'): {'k': 3}, ('X', '_'): {'r': 1}, ('N', 'e'): {'x': 1}})
    

    转换后的字典将是:

    defaultdict(<class 'dict'>, {('M', 'o'): {'ce': 0.3333333333333333, 'p': 0.6666666666666666}, ('K', '^'): {'d': 1.0}, ('F', 'x'): {'g': 0.75, '_': 0.25}, ('J', 'o'): {'y': 1.0}, ('H', 't'): {'m': 1.0}, ('A', 'b'): {'k': 1.0}, ('X', '_'): {'r': 1.0}, ('N', 'e'): {'l': 1.0}})
    

    我该怎么做呢?如何访问字典的defaultdict中的键。我目前的想法是:

    for major_key in dictionary:
        dictionary[major_key]...
    

    ......那就是我被困住的地方。

    非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

除了能够遍历字典中的键之外,在Python中,您还可以迭代键值元组或仅仅值。所以我们可以这样做:

cap install

这应该有助于为您提供所需的结果。请注意,在Python 2中,您应该调用for major_key, sub_dict in d.items(): total_key_count = 0 # Add up all sub key values to calculate probabilities for sub_count in sub_dict.values(): total_key_count += sub_count # Now update nested dictionary values accordingly for minor_key, sub_count in sub_dict.items(): sub_dict[minor_key] = sub_count / total_key_count 而不是iteritems(),因为在Python 2中items()实际上构建了一个tupes列表,而不是返回像items()这样的迭代器。与iteritems()values()相同。