簡體   English   中英

檢查參數(元組)是否在字典中

[英]Check if argument (tuple) is in dictionary

我真的在為這本字典中的元組解壓縮和迭代而苦苦掙扎。 本質上,該函數采用兩個坐標位置(Wx,Wy),並檢查其是否位於任一列表(在字典中)中的元組之一中,是否存在加成。 我覺得我想得太多了,或者還很遙遠。

謝謝 :)

bonuses = {1: [(3,3)], 2: [(1, 0), (0, 3), (2, 4), (5, 2)]}

def find_bonus(pos):
""" Check if position is valid"""

    bonus_info = dict.values(bonuses)

    for (Wx, Wy) in pos:
        if (Wx, Wy) in tuple(bonus_info):
            return pos
    else:
    return False

您可以直接將元組與元組進行比較:

1-迭代字典的值。 2-檢查pos是否在值中,如果是,則返回True
3-如果在任何地方都找不到pos,則返回False

bonuses = {1: [(3,3)], 2: [(1, 0), (0, 3), (2, 4), (5, 2)]}

def find_bonus(pos):
""" Check if position is valid"""

    for valid_pos in bonuses.values():
        if pos in valid_pos:
            return pos   # <-- or return True, depending if pos can ever evaluate at False.
    return False

您可以使用itertools.chain()

from itertools import chain

def find_bonus(pos):
    return pos if pos in chain(*bonuses.values()) else False

演示:

>>> bonuses = {1: [(3,3)], 2: [(1, 0), (0, 3), (2, 4), (5, 2)]}
>>> find_bonus((100,10))
False
>>> find_bonus((10,10))
False
>>> find_bonus((1,0))
(1, 0)
>>> find_bonus((3,3))
(3, 3)
>>> find_bonus((5,2))
(5, 2)

之所以bonuses.values() ,是因為chain()與應用於bonuses.values()*拆包運算符結合使用時,可以有效地將字典的值展平到一個列表中,可以使用in輕松測試其成員資格。

如果您返回布爾值,則可以進一步簡化您的函數:

def find_bonus(pos):
    return pos in chain(*bonuses.values())

您可以改為執行此操作。 (假設pos是一個元組)

bonus_info = set(i for i in j for j in bonuses.values())
def find_bonus(pos):
    if pos in bonus_info:
        return pos
    else:
        return None

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM