我的LDAP返回如下值
[('CN=b12345,OU=Accounts,DC=mydomain,DC=com', {'Fname': [Jose, Movi'], 'location': [b'London'], 'mail': [b'jose.movi@google.com'], 'title': [b'Sales -Exec -Retail']})]
[('CN=h12345,OU=Accounts,DC=mydomain,DC=com', {'Fname': [Lorraine, Moses'], 'location': [b'Boston'], 'mail': [b'Lorraine.Moses@google.com'], 'title': [b'Sales -ExecIII -Retail']})]
[('CN=o12345,OU=Accounts,DC=mydomain,DC=com', {'Fname': [Andy, Cameron'], 'location': [b'NewYork'], 'mail': [b'Andy.Cameron@google.com'], 'title': [b'Customer Support II - Fixed']})]
我想为每个条目拆分它们,并将它们打印为
DisplayName:Jose, Movi
Location:London
Email:jose.movi@google.com
Designation:Sales -Exec -Retail
提前向我道歉,因为我是python的初学者。
个人列表
当您定义x
为:
x = [('CN=b12345,OU=Accounts,DC=mydomain,DC=com',
{'Fname': ['Jose, Movi'],
'location': [b'London'],
'mail': [b'jose.movi@google.com'],
'title': [b'Sales -Exec -Retail']})]
您可以以key
value
方式打印:
for k, v in x[0][1].items():
try:
print(f"{k.title()}: {', '.join(a.decode('utf-8') for a in v)}")
except (UnicodeEncodeError, AttributeError):
# If you try to decode a regular string
print(f"{k.title()}: {', '.join(v)}")
输出Fname: Jose, Movi
Location: London
Mail: jose.movi@google.com
Title: Sales -Exec -Retail
或者为每个key
分配自定义值:
def printer(k, v):
try:
print(f"{k.title()}: {', '.join(a.decode('utf-8') for a in v)}")
except (UnicodeEncodeError, AttributeError):
# If you try to decode a regular string
print(f"{k.title()}: {', '.join(v)}")
for k, v in x[0][1].items():
if k == "Fname":
printer("DisplayName", v)
elif k == "mail":
printer("Email", v)
elif k == "title":
printer("Designation", v)
else:
printer(k, v)
输出:
Displayname: Jose, Movi
Location: London
Email: jose.movi@google.com
Designation: Sales -Exec -Retail
如果你使用>= Python3.10
,你可以使用match
语句自定义标题:
for k, v in x[0][1].items():
match k:
case "Fname":
printer("DisplayName", v)
case "mail":
printer("Email", v)
case "title":
printer("Designation", v)
case _:
# Default case
printer(k, v)
<<h3>所有列表/h3>当您定义x
为:
x = [[('CN=b12345,OU=Accounts,DC=mydomain,DC=com',
{'Fname': ['Jose, Movi'],
'location': [b'London'],
'mail': [b'jose.movi@google.com'],
'title': [b'Sales -Exec -Retail']})],
[('CN=h12345,OU=Accounts,DC=mydomain,DC=com',
{'Fname': ['Lorraine, Moses'],
'location': [b'Boston'],
'mail': [b'Lorraine.Moses@google.com'],
'title': [b'Sales -ExecIII -Retail']})],
[('CN=o12345,OU=Accounts,DC=mydomain,DC=com',
{'Fname': ['Andy, Cameron'],
'location': [b'NewYork'],
'mail': [b'Andy.Cameron@google.com'],
'title': [b'Customer Support II - Fixed']})]]
你可以编辑你的例子在i
的另一个for
循环:
for i in x:
for k, v in i[0][1].items():
# Rest of method goes here
如果您严格使用单元素列表,您可以将', '.join(a.decode('utf-8') for a in v)
更改为v.decode('utf-8')
。', '.join(v)
到v
当你有字典时@Freddy Mcloughlan的答案很好,如果数据来自文件,下面的答案可能有用。此外,它还使用了正则表达式,这总是一个很好的练习。
import re
file = open("test.file", "r", encoding="utf-8")
entry = file.readline()
while entry not in ["", " "]:
parsing = re.search(r"'Fname': [([^]]*)], 'location': [b'([^]]*)'], 'mail': [b'([^]]*)'], 'title': [b'([^]]*)']", entry)
name = parsing.group(1)
location = parsing.group(2)
mail = parsing.group(3)
designation = parsing.group(4)
print(name, location, mail, designation)
entry = file.readline()
file.close()