Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
LDAP Python查询并转换适当的字典_Python_Django_Dictionary_Ldap - Fatal编程技术网

LDAP Python查询并转换适当的字典

LDAP Python查询并转换适当的字典,python,django,dictionary,ldap,Python,Django,Dictionary,Ldap,对不起,我想不出更好的题目了 所以我是Python的初学者,我真的在努力学习如何使用它。我当前的问题是创建一种简单的方法来减少从python查询中收到的结果 如果我理解我在处理什么,LDAP查询将返回字典的列表的列表,其中字典中的值是列表。这是需要遍历的大量内容,因此我认为必须有一种奇妙的python方法将其转换为字典的列表,其中字典的值只是一个简单的字符串 目前,我的代码只是简单地获取字典的列表,但我仍然将字典值作为列表本身 for item in data: results.appe

对不起,我想不出更好的题目了

所以我是Python的初学者,我真的在努力学习如何使用它。我当前的问题是创建一种简单的方法来减少从python查询中收到的结果

如果我理解我在处理什么,LDAP查询将返回
字典的
列表的
列表
,其中
字典
中的值是
列表
。这是需要遍历的大量内容,因此我认为必须有一种奇妙的python方法将其转换为
字典的
列表,其中
字典的值只是一个简单的字符串

目前,我的代码只是简单地获取
字典
列表
,但我仍然将
字典
值作为
列表
本身

for item in data:
    results.append(item[1])
再一次,我是一个初学者,所以我真的不知道该怎么做。我也在使用Django,如果这能帮助任何人理解我的困境的话

编辑(添加数据示例):


结构有点像这样:

data[index][1] = {'uid': ['restest'], 'mail': [''], 'givenName': ['Research'], 'cn': ['Research Test Account'], 'sn': ['Account']}

我希望它能取代
'givenName':['Research']
成为
'givenName':'Reaseach'
哈哈,我不确定你是否需要如此复杂的数据结构。考虑重构代码以使数据结构更易于理解。阅读:面向对象编程,类,函数编程原理

如果你只想用一本字典,下面是答案:

data = {k:v[0] for (k,v) in data.items()}
这就是它的作用:

>>> data = {'uid': ['restest'], 'mail': [''], 'givenName': ['Research'], 'cn': ['Research Test Account'], 'sn': ['Account']}
>>> data
{'mail': [''], 'sn': ['Account'], 'givenName': ['Research'], 'uid': ['restest'], 'cn': ['Research Test Account']}
>>> data = {k:v[0] for (k,v) in data.items()}
>>> data
{'mail': '', 'givenName': 'Research', 'cn': 'Research Test Account', 'sn': 'Account', 'uid': 'restest'}
您所做的只是将字典重新映射到每个列表的第一项。如果您想遍历结构的所有级别并执行此操作,只需将上述内容嵌套在一些列表理解中:

[[[{k:v[0] for (k,v) in change_dict.items()} for change_dict in list_of_dicts]
  for list_of_dicts in list_of_lists]
 for list_of_lists in mydata]

当你只对数据中的一个“叶子”元素做一些事情时,嵌套这么多的列表理解并不是坏事,但是如果你试图在每个层次上操作你的数据结构,这会变得非常混乱。请参阅开头的我的评论。

您能发布一些数据样本吗?例如,列表和字典是什么样的?结构有点像这样:数据[index][1]={'uid':['restest'],'mail':['''],'givenName':['Research'],'cn':['Research'],'sn':['Account']}我希望它代替'givenName':['Research']成为'givenName':'Research'这有什么帮助吗?谢谢谢谢,我一直听说“像python程序员一样思考”,但我主要从事Java和Android开发。您的解决方案非常简洁,我只是对LDAP返回查询的方式非常失望;通常情况下,我会尽量避免这种嵌套的混乱。非常感谢@鲍勃:是的,我从来没有使用过LDAP或Django,所以我不知道这其中有多少是你的错。如果您仔细阅读LDAP文档,很可能会有一种更简单的方法来实现这一点。