Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python是通过包含列表的字典列表创建新字典的最佳方法_Python_Arrays_List_Dictionary_Ldap - Fatal编程技术网

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

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 = []

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

pythons ldap库的标准结果:ldap.searchs()是一个元组列表,其中包含字典,ie中包含列表:

[('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'),
}