Python: поиск минимального значения по словарю - PullRequest
0 голосов
/ 24 ноября 2011

Итак, вот что я хотел бы написать:

cur_loc = min(open_set,key=lambda x:costs[x])

cur_loc - это кортеж, и цель состоит в том, чтобы установить его равным кортежу в open_setс самой низкой стоимостью.(и вы найдете стоимость x с costs[x])

Как я мог это сделать?Я попробовал документацию Python.org на min(), но мне не очень-то помогли.

Спасибо!

РЕДАКТИРОВАТЬ: Я решил свою собственную проблему.

Я был отсталым и не инициализировал словарь затрат.Я на самом деле копировал и вставлял чужой код Python, чтобы проверить, что они делают, но, очевидно, созданный ими фрагмент не включал в себя часть инициализации.Woops.Если кому-то интересно:

        for row in range(self.rows):
            for col in range(self.cols):
                myloc = (row,col)
                if (myloc) not in closed_set:

                    costs[myloc] = (abs(end_row-row)+abs(end_col - col))*10

                    if (myloc) not in open_set:
                        open_set.add(myloc)

                    parents[myloc] = cur_loc

        cur_loc = min(open_set,key=lambda x:costs[x])

Ответы [ 2 ]

5 голосов
/ 24 ноября 2011

работал для меня. Какой у тебя вопрос?

>>> costs = { '1': 1, '2': 2, '3': 3 }
>>> open_set = set( ['1','2'] )
>>> min(open_set,key=lambda x:costs[x])
'1'
3 голосов
/ 24 ноября 2011

Введенное вами значение будет правильным, если cost[x] был поиск по словарю с кортежами в качестве ключей.Я думаю, что вы, возможно, хотели извлечь поле для кортежа и посмотреть стоимость этого поля:

>>> costs = dict(red=10, green=20, blue=30)
>>> open_set = {('red', 'car'), ('green', 'boat'), ('blue', 'plane')}
>>> min(open_set, key=lambda x: costs[x[0]])
('red', 'car')
...