Python是通过包含列表的字典列表创建新字典的最佳方法
我有PHP背景,对python相当陌生,我正在创建一个帮助器类,用于从ldap服务器返回一些ldap结果 pythons ldap库的标准结果:ldap.searchs()是一个元组列表,其中包含字典,ie中包含列表:Python是通过包含列表的字典列表创建新字典的最佳方法,python,arrays,list,dictionary,ldap,Python,Arrays,List,Dictionary,Ldap,我有PHP背景,对python相当陌生,我正在创建一个帮助器类,用于从ldap服务器返回一些ldap结果 pythons ldap库的标准结果:ldap.searchs()是一个元组列表,其中包含字典,ie中包含列表: [('uid', {'cn': ['cnvalue']}), ('uid2', {'cn': ['cnvalue2']})] 我想将其转换为一个简单的字典列表,或者在php中转换为一个关联数组数组 就我的一生而言,我不知道该怎么做 我就是这样尝试的: output = []
[('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中的某个条目不存在电话号码,则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'
不是键)
然后将[1]
应用于结果。您的意思大概是[0]
,但即使如此,空字符串的长度也为0。无法在其中查找索引0或索引1
你可以改为:
result[1].get('givenName', [''])[0]
现在,在缺少键的情况下,您有一个包含空字符串的列表。因此,将[0]
应用于它会得到一个空字符串
有一种选择(它不处理空列表,但我不知道您处理的数据中是否出现过这种情况):
然后:
顺便说一句,您使用了枚举
,但从未真正提到i
。因此,您也可以编写以获得结果:
这将返回一个列表(如果'givenName'
是字典中值为列表的键)或一个空字符串(如果'givenName'
不是键)
然后将[1]
应用于结果。您的意思大概是[0]
,但即使如此,空字符串的长度也为0。无法在其中查找索引0或索引1
你可以改为:
result[1].get('givenName', [''])[0]
现在,在缺少键的情况下,您有一个包含空字符串的列表。因此,将[0]
应用于它会得到一个空字符串
有一种选择(它不处理空列表,但我不知道您处理的数据中是否出现过这种情况):
然后:
顺便说一句,您使用了
枚举
,但从未真正提到i
。因此,您也可以编写以获得结果:
请注意,列表从0
开始,而不是从1
如何将givenName CoresPounds添加到cn
和cnvalue
?最好以您将使用的格式发布一些包含姓名和电话号码的数据。尚不清楚您的包含字典的元组列表与您的问题之间的关系。请注意,列表是从0
开始的,而不是从1
如何将givenName Coress映射到cn
和cnvalue
?最好以您将使用的格式发布一些包含姓名和电话号码的数据。不清楚你的元组列表和你的问题有什么关系。@alko:这是一本字典。示例中的占位符是{'cn':['cnvalue']}
,但提问者查找的是givenName
和telephoneNumber
,而不是cn
。因此,我假定cn
是作为实际键的示例或占位符,这些键可能存在于给定的LDAP记录中,也可能不存在于给定的LDAP记录中。说,“每个结果元组的形式是(dn,attrs),其中dn是一个包含条目dn(可分辨名称)的字符串,attrs是一个包含与条目关联的属性的字典。attrs的键是字符串,关联的值是字符串列表。”!史蒂夫:这是一个如此快速的回答,正是我想要的。谢谢@阿尔科:这是一本字典。示例中的占位符是{'cn':['cnvalue']}
,但提问者查找的是givenName
和telephoneNumber
,而不是cn
。因此,我假定cn
是作为实际键的示例或占位符,这些键可能存在于给定的LDAP记录中,也可能不存在于给定的LDAP记录中。说,“每个结果元组的形式是(dn,attrs),其中dn是一个包含条目dn(可分辨名称)的字符串,attrs是一个包含与条目关联的属性的字典。attrs的键是字符串,关联的值是字符串列表。”!史蒂夫:这是一个如此快速的回答,正是我想要的。谢谢
d = {
'firstname': getfirst(result[1], 'givenName'),
}