在字典词典中找到多个最小值

时间:2019-02-11 20:57:37

标签: python dictionary min

我有一个字典的python字典,我想为每个外部字典中的每个键找到每个内部字典的所有最小值。我将在下面举例说明。

要给出简化版本,请说我们有以下命令:

my_dict = {'a': {'b': 10, 'c': 5, 'd': 6, 'e': 6, 'f': 6}, 'b': {'a': 10, 'c': 5, 'd': 4, 'e': 4, 'f': 4}, 'c': {'a': 5, 'b': 5, 'd': 7, 'e': 7, 'f': 7}, 'd': {'a': 6, 'b': 4, 'c': 7, 'e': 0, 'f': 0},'e': {'a': 6, 'b': 4, 'c': 7, 'd' : 0, 'f': 0}, 'f': {'a': 6, 'b': 4, 'c': 7, 'd': 0, 'e': 0}}

我想创建一个新的字典,其中对于每个内部字典,我都会找到该字典的最小值并获取相应的键值。

因此,对于具有a的键{'b': 10, 'c': 5, 'd': 6, 'e': 6, 'f': 6},最小值为5,因此我将a放入分配给空列表的新字典中,然后附加{{1} },因为它与值5相对应。

以上列表的最终输出如下:

c

我遇到麻烦的部分是是否存在多个最小值。例如,output{a: [c], b: [d, e, f], c: [a, b], d: [e, f], e: [d, f], f: [d, e ]} 的内部字典具有两个键(fd,它们的值均为0,因此都应返回两者。

这是我到目前为止的代码:

e

哪个给我:

new_dict = {}
for k, v in my_dict.items():
    new_dict[k] = [min(v, key=v.get)]

print((new_dict))

因此它返回的是正确的最小值,而不是所有最小值。

感谢您的宝贵时间。

1 个答案:

答案 0 :(得分:2)

您可以在for循环中进行一些小的修改,并在生成键列表之前从内部字典的值中获取最小值:

new_dict = {}
for k, v in my_dict.items():
    min_val = min(v.values())
    new_dict[k] = [sk for sk, sv in v.items() if sv == min_val]

print(new_dict)
# {'a': ['c'], 'c': ['a', 'b'], 'f': ['e', 'd'], 'e': ['f', 'd'], 'd': ['f', 'e'], 'b': ['e', 'd', 'f']}