gpt4 book ai didi

Python通过包含列表的字典列表循环创建新字典的最佳方法

转载 作者:太空宇宙 更新时间:2023-11-04 10:40:48 27 4
gpt4 key购买 nike

我有 PHP 背景并且对 python 相当陌生,我正在创建一个帮助程序类,用于从 ldap 服务器返回一些 ldap 结果。

pythons ldap 库的标准结果:ldap.search_s() 是一个元组列表,里面有字典,里面有列表,即:

[('uid', {'cn': ['cnvalue']}), ('uid2', {'cn': ['cnvalue2']})]

我想把它转换成一个简单的字典列表,或者在 php 中谈论一个关联数组的数组。

我这辈子都不知道该怎么做。

我是这样尝试的:

output = []        
for i, result in enumerate(results):
d = {
'firstname': result[1].['givenName'][1],
'phone': result[1].['telephoneNumber'][1]
}
output.append(d)
return output

如果 ldap 中的条目不存在 telephoneNumber,则 python 库不会填充该键,因此有时我会遇到无效键异常,因此我修改为以下内容。

output = []        
for i, result in enumerate(results):
d = {
'firstname': result[1].get('givenName', '')[1],
'phone': result[1].get('telephoneNumber' ,'')[1]
}
output.append(d)
return output

即便如此,如果电话号码不存在,那么列表条目 [1] 也不存在,所以现在我遇到了“超出范围”的错误。

帮助。

谢谢大家。

最佳答案

result[1].get('givenName', '')

这将返回一个列表(如果 'givenName' 是字典中的一个键,其值是一个列表)或一个空字符串(如果 'givenName' 是不是 key )。

然后您将对结果应用 [1]。大概你的意思是 [0],但即便如此,空字符串的长度也为 0。你无法在其中查找索引 0 或索引 1。

你可以改为:

result[1].get('givenName', [''])[0]

现在在缺少 key 的情况下,您有一个包含空字符串的列表。因此,对其应用 [0] 会得到一个空字符串。

另一种选择(它不处理空列表,但我不知道您正在处理的数据中是否曾经出现过这种情况):

def getfirst(attrs, key):
list_or_none = attrs.get(key)
return '' if list_or_none is None else list_or_none[0]

然后:

d = {
'firstname': getfirst(result[1], 'givenName'),
}

顺便说一句,您使用了 enumerate 但实际上从未提及 i。所以你也可以写 for result in results:

关于Python通过包含列表的字典列表循环创建新字典的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20692418/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com