【问题标题】:Python dictionary printing specific value [closed]Python字典打印特定值[关闭]
【发布时间】:2019-04-10 22:08:57
【问题描述】:

我有这个变量,里面有两个字典:

dic = {"id": 2125, "role": "Policy", "visible": "Users", "name": "Peering", "phone": "", "email": "peering@fb.com"}, {"id": 2568, "role": "NOC", "visible": "Users", "name": "Network Operations", "phone": "+1 650 308 7200", "email": "noc@fb.com"}

我想打印属于“角色”NOC 的电子邮件地址!!

我可以使用

for key in dic:
    if key['role']=='NOC':
       print(key['email'])

但我不想使用 if key['role']=='NOC': 。谁有更好的主意?打印属于特定角色的电子邮件地址。

【问题讨论】:

  • 但是我不想用 if key['role']=='NOC' 有什么具体原因吗?
  • 因为我必须为每个角色都这样做
  • @EteqEteq,是的。但是您怎么可能避免对每个key['role'] 执行测试?不管你怎么推销它,一个循环是不可避免的。

标签: python dictionary


【解决方案1】:

在这个简单的例子中,你可以创建一个字典,键是角色本身:

> roles = {d['role']:d for d in dic}
> roles['NOC']['email']

请注意,您仍在循环所有字典项以创建新项。

【讨论】:

    【解决方案2】:

    另一种方法是使用pandas

    import pandas as pd
    
    df = pd.DataFrame(list(dic))
    email = df.loc[df['role'] == 'NOC', 'email']
    

    【讨论】:

      【解决方案3】:

      您的问题没有任何意义,但是要在没有上述代码行的情况下达到您的价值,请写:

      for eachDict in dic:
          lst = eachDict.values()
          if 'NOC' in lst:
              print eachDict['email']
      

      【讨论】:

        【解决方案4】:

        你可以使用filter

        for entry in filter(lambda x: x['role'] == 'NOC', dic):
            print(entry['email'])
        

        比较仍然存在,但您的 if 声明不见了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-01
          • 2022-11-12
          • 1970-01-01
          • 2019-02-01
          • 1970-01-01
          • 2015-08-14
          相关资源
          最近更新 更多