Что эквивалентно этому Ruby-коду в Python? - PullRequest
0 голосов
/ 07 сентября 2018
#Ruby Code
si=1
gw=0
linkedNodes=[{1=>2},{1=>0}]
puts "found node" if linkedNodes.include?({si=>gw})

Я пытаюсь выяснить, есть ли способ сделать что-то подобное в Python. Я ищу в массиве хэшей совпадение по полному хешу, что невероятно легко сделать в Ruby с помощью

include?() 

метод. Я нашел много информации о поиске списков для хэша по ключу или по значению, но я пытаюсь сопоставить весь хэш (ключ и значение). Я читал об опциях фильтра с использованием лямбды, но это быстро переросло в горячую неразбериху, когда я начал получать исключения и поиграться с try: exception: blocks.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Предполагая, что вы имели в виду linkedNodes = [{1 => 2}, {1 => 0}], это буквальный перевод на python:

>>> si=1
>>> gw=0
>>> linkedNodes = [{1:2},{1:0}]
>>> if {si:gw} in linkedNodes:
...   print("found node")
#⇒ found node
0 голосов
/ 07 сентября 2018

Обычный или садовый сорт Питон не имеет ничего подобного. Вы сделали бы это в два этапа: сначала проверьте ключ, затем значение:

if si in linkedNodes and linkedNodes[si] == gw:
    # do whatever

and - это короткое замыкание, поэтому, если si не является ключом в linkedNodes, linkedNodes[si] == gw не оценивается; Вы не можете получить ошибку, пытаясь получить доступ к этому элементу в этом случае.

Если вы хотите это сделать, вы можете создать подкласс dict, где in ведет себя таким образом (или делает это необязательно). Это я оставлю как упражнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...