在Python中,我可以在key:value对的赋值内执行[if exists]吗?

时间:2015-11-18 18:29:30

标签: python dictionary

我正在进行LDAP搜索,我的结果就是我想要的。我把结果放到字典里。结果中的某些用户有一个特定的键:值对,有些则没有。我希望所有用户都插入到我的新词典中。 这是在for循环中创建的dict。

ldap_output_Emply_dict[result_affil[i][1]['uid'][0]] = [
result_affil[i][1]['mail'][0],
result_affil[i][1]['uconnPersonPrimaryAffiliation'][0],
result_affil[i][1]['eduPersonEntitlement']
]

目前,1553中只有16位用户拥有最后一项

result_affil[i][1]['eduPersonEntitlement']

我想在我的新词典中使用所有1553。 我试过的这种语法无效,这甚至可能吗?

ldap_output_Emply_dict[result_affil[i][1]['uid'][0]] = [
result_affil[i][1]['mail'][0],
result_affil[i][1]['uconnPersonPrimaryAffiliation'][0],
if 'eduPersonEntitlement' in result_affil: result_affil[i][1]['eduPersonEntitlement']
]

2 个答案:

答案 0 :(得分:1)

  

我可以在键:值对的赋值中执行[if exists]吗?

是的,除了使用字典的.get方法作为@ 6c1提及之外,你可以使用这样的三元语句:

d1 = {}
d2 = {1:1,2:2,3:3}

d1[4] = d2[4] if 4 in d2 else None

在您的代码中:

ldap_output_Emply_dict[result_affil[i][1]['uid'][0]] = [
result_affil[i][1]['mail'][0],
result_affil[i][1]['uconnPersonPrimaryAffiliation'][0],
result_affil[i][1]['eduPersonEntitlement'] if 'eduPersonEntitlement' in result_affil[i][1] else None
]

答案 1 :(得分:0)

不是使用dict[key]语法键入字典,而是可以利用dict.get(key, default)方法,如果键存在则返回键的值,如果键不存在则返回默认值。< / p>

在你的情况下,它将是:

ldap_output_Emply_dict[result_affil[i][1]['uid'][0]] = [
    result_affil[i][1]['mail'][0],
    result_affil[i][1]['uconnPersonPrimaryAffiliation'][0],
    result_affil[i][1].get('eduPersonEntitlement', None)
]