【问题标题】:Finding a dictionary from its contents从内容中查找字典
【发布时间】:2017-09-05 09:22:29
【问题描述】:

我正在尝试创建一些东西来证明左手在墙上穿过迷宫的概念是可行的,所以我制作了一个 python 3.6 龟程序来做到这一点。我知道这是非常低效的,我是初学者,但我的问题是; 如何从字典的内容中找到字典的名称。

这是一个例子:

place1 = {"coordinates" : (150, 150), "filled_in": False}
place2 = {"coordinates" : (100, 100), "filled_in": True}
place3 = {"coordinates" : (50, 50), "filled_in": True}
turtle position = 50, 50

基本上是这样的

?["coordinates" : (50, 50), "filled_in" = True

我希望能够从其中的值中找到字典,以便检查它是否已填写。

if (dictionary containing value of "coordinates" : (50, 50))["filled_in"] = False:
    do whatever

我知道我的格式可能全部错误,但提前感谢您的帮助。

【问题讨论】:

    标签: python dictionary grid maze


    【解决方案1】:

    您可以将它们全部放在一个可以按坐标索引的字典中:

    place1 = {"coordinates" : (150, 150), "filled_in": False}
    place2 = {"coordinates" : (100, 100), "filled_in": True}
    place3 = {"coordinates" : (50, 50), "filled_in": True}
    places = {p["coordinates"]: p for p in [place1, place2, place3]}
    

    然后只是索引它:

    >>> places[(50, 50)]['filled_in']
    True
    >>> places[(150, 150)]['filled_in']
    False
    

    【讨论】:

    • 真的很有帮助。现在我只是面临拥有 64 个字典的问题。正如我所说,格式很差。
    【解决方案2】:

    只需检查字典的'coordinates' 键:

    for d in (place1, place2, place3):
        if d['coordinates'] == (50, 50):
            do_something()
    

    【讨论】:

      【解决方案3】:

      我将详细说明@MSeifert 的答案。假设您有 64 个变量,如下所示:

      place1, place2, ..., place64
      

      只需替换这个:

      places = {p["coordinates"]: p for p in [place1, place2, place3]}
      

      与:

      places_list = ["place{}".format(num) for num in range(1, 65)]
      places64 = eval(str(places_list))
      places = {p["coordinates"]: p for p in places64}
      

      话虽如此,使用eval is a bad practice。例如,考虑从单独的文件加载坐标。

      【讨论】:

      • 而不是eval 使用places = [locals()[name] for name in places_list] 这也有效,它比eval 更“邪恶”。但是,这也不是一个好习惯——当有很多听写时,我会选择一种完全不同的方法。 :)
      猜你喜欢
      • 2011-06-30
      • 1970-01-01
      • 2013-10-23
      • 2018-06-09
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多