【问题标题】:Getting items from multiple dictionaries inside a tuple从元组内的多个字典中获取项目
【发布时间】:2021-05-07 11:40:39
【问题描述】:

我有以下基于PythonMETAR(航空中的某种天气编码)库的代码:

from PythonMETAR import *
report = Metar('LRSM')
properties = report.getAttribute('cloud')
print(report)

print(properties)

返回以下结果:

LRSM 071100Z 28005KT 220V320 9000 -RA FEW006 BKN025 BKN035 12/11 Q1010 R01/29//95

({'code': 'FEW', 'meaning': 'Few', 'oktaMin': 1, 'oktaMax': 2, 'altitude': 600, 'presenceCB': False, 'presenceTCU': False}, {'code': 'BKN', 'meaning': 'Broken', 'oktaMin': 5, 'oktaMax': 7, 'altitude': 2500, 'presenceCB': False, 'presenceTCU': False})

如果code 的值是BKNOVC,我想创建一段代码,它将在每个字典中查找properties 元组并返回TRUE。除此之外,如果TRUE 我只想查看altitudeBKNOVC 并检查这些值是否小于1500

现在我并不真正害怕 IF 语句,但目前,在一些 Google 搜索之后,我被困在从字典中获取这些特定项目并最终将这些项目与 altitude 值联系起来。

【问题讨论】:

  • 如果code 值为BKNOVC 并且对于具有BKN 或@987654340 的字典的altitude 值,则IF 语句的预期输出将为TRUE @ 作为 code 小于 1500。

标签: python dictionary tuples


【解决方案1】:

您可以使用列表推导式。

seq = ({'code': 'FEW', 'meaning': 'Few', 'oktaMin': 1, 'oktaMax': 2, 'altitude': 600, 'presenceCB': False, 'presenceTCU': False},
    {'code': 'BKN', 'meaning': 'Broken', 'oktaMin': 5, 'oktaMax': 7, 'altitude': 2500, 'presenceCB': False, 'presenceTCU': False})

res = [i['code'] in ('BKN', 'OVC') and i['altitude'] < 1500 for i in seq]

print(res)

输出

[False, False]

【讨论】:

  • 谢谢,这正是我所需要的!
  • 如果您不明白这是什么,请在 google 上查找“列表理解”
  • 有没有办法让代码忽略这个错误? TypeError: 'NoneType' object is not iterable 基本上有些情况下根本没有 BKN/OVC 值,在所有这些情况下,它都会返回一个 TypeError。我应该def一个函数:if none then continue else return res吗?
  • @instaspam 你是什么意思?你能粘贴你得到那个错误的输入吗?
  • from PythonMETAR import * report = Metar('LROP') properties = report.getAttribute('cloud') print(report) print(properties) res = [i['code'] in ('BKN', 'OVC') and i['altitude'] &lt; 1500 for i in properties] print(res)LROP 071230Z 26011KT CAVOK 27/10 Q1009 NOSIG None 作为输出。基本上代码没有找到我要评估的任何cloud 字典,并返回我上面的TypeError
【解决方案2】:
t=({'A':'a','B':'b'}, {'A':0, 'B':'c'})

def foo(t):
    last=[]
    for d in t:
        if d['A']=='a' and d['B']=='b':
            last+=[d]
    return last

print(foo(t))

foo 接受一个 touple 并返回所有匹配的字典。您可以在 if 部分修改它以返回 true 或特定事物的特定值。

【讨论】:

    【解决方案3】:

    使用这个:

    for dic in properties:
        if dic['code'] in ['BKN', 'OVC']:
            print(f"Dic: {dic} - TRUE, the code value is {dic['code']}") 
            if dic['altitude'] > 1500:
                print(f"  Altitude: {dic['altitude']}")
    

    【讨论】:

      【解决方案4】:

      这是一个名为checker() 的函数,它的输入是字典。

      它返回两个布尔值。第一个布尔值表示code 是否为BKN/OVC,第二个布尔值表示alititude 要求。

      def checker(d):
          return_booleans = [False, False]
          if d['code'] in ['BKN', 'OVC']:
              return_booleans[0] = True
              if d['altitude'] > 1500:
                  return_booleans[1] = True
          return return_booleans
      
      for d in properties:
          code_bool, altitude_bool = checker(d)
          print(code_bool, altitude_bool)
      

      输出是:

      False False
      True True
      

      【讨论】:

        猜你喜欢
        • 2017-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-22
        • 2021-12-12
        • 1970-01-01
        • 1970-01-01
        • 2012-12-08
        相关资源
        最近更新 更多