【问题标题】:searching for keys of minimum values within a dict在字典中搜索最小值的键
【发布时间】:2023-03-15 06:52:01
【问题描述】:

我正在搜索一个包含字典中最小值键的列表。 目标是获取每个 i 的最小值的键。

#Dict:
p[i,j] = {(0,0):10, (0,1):11, (0,2):12, (1,0):20, (1,1):21, (1,2):22, (2,0):30, (2,1):31, (2,2):32}

#The list should look like this:
list = [(0,0), (1,0), (2,0)]

我可以用循环来做吗?

for i in range(3):
   ...

或者我怎样才能生成这个列表?

【问题讨论】:

  • 为什么 (1,1) 是 j=1 的最小值?
  • 是的,你是对的。它应该是 i=0,1,2 的最小值。
  • 在您的示例中, (1,1) 和 (2,2) 都与任何最小值无关。不清楚你问的是什么。
  • 哦,没看到我的错误。 (0,0)、(1,0) 和 (2,0) 与最小值相关。对吗?

标签: python-3.x dictionary key minimum


【解决方案1】:

对不起,我不明白你的意思。也许您想获取 P 的键,它是最小值,并且该键属于列表。你可以试试下面的代码。

p = {(0,0):10, (0,1):11, (0,2):12,
     (1,0):20, (1,1):21, (1,2):22,
     (2,0):30, (2,1):31, (2,2):32}
list = [(0,0), (1,1), (2,2)]

listRes = {}
# get listRes 10:(0,0) 21:(1,1) 32:(2,2)
for j in range(len(list)):
    listRes[p[list[j]]] = list[j]

# (10, (0, 0))
print(min(listRes.items(), key=lambda x: x[0]))

好吧,也许我明白了。请参阅下面的代码。

import sys
p = {(0,0):10, (0,1):11, (0,2):12,
     (1,0):20, (1,1):21, (1,2):22,
     (2,0):30, (2,1):31, (2,2):32}

res = []
tuple1 = ()

for i in range(3):
    minValue = sys.maxsize
    for j in range(3):
        if minValue>p[(i,j)]:
            tuple1 = (i,j)
            minValue = p[(i,j)]
    res.append(tuple1)
print(res)

【讨论】:

  • 感谢您的回答!对不起,我的误解。我编辑了情况。我正在寻找每个 i 的最小值的键。这意味着列表应如下所示:List= [(0,0), (1,0), (2,0)]。我希望这能说明问题。
  • 对不起,我还是不明白为什么你的结果是 List= [(0,0), (1,0), (2,0)]。
  • 对于 i = 0 (j=0,1,2),最小值为 10,所以我需要密钥 (0,0)。对于 i = 1,最小值是 20 -> key (1,0),对于 i = 3,最小值是 30 -> key (2,0)。希望这对您有所帮助。
  • 我已经修改了答案,但我不擅长python。应该有更通用和简洁的代码。
  • 这正是我正在寻找的。非常感谢!
猜你喜欢
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
  • 2018-09-27
  • 2018-05-19
  • 2016-09-21
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
相关资源
最近更新 更多