[英]Python : array tuple extraction
results=[('uid=alex,class=zenth',{'age':['12'],'uidnumber':['12AC']}),('uid=beth,class=nenth',{'age':['22'],'uidnumber':['13SD']})]
像這樣,它將有很多元組,我如何僅提取UID,所以我要在結果數組中使用alex,beth和任何其他uid。
我可以
uid_val_list=[]
for _,val in enumerate(results):
list_vals=val[0].split(",")
uid_val=list_vals[0].split("=")[1]
uid_val_list.append(uid_val)
有什么更好的方法嗎?
您可以使用“ re ”模塊:
import re
results=[('uid=alex,class=zenth',{'age':['12'],'uidnumber':['12AC']}),('uid=beth,class=nenth',{'age':['22'],'uidnumber':['13SD']})]
uid_val_list=[]
for _,val in enumerate(results):
result = re.search("uid=(.*),",val[0])
uid_val_list.append(result.group(1))
輸出:
>>> uid_val_list
['alex', 'beth']
使用命令re.search()
可以掃描字符串並返回所需的部分。 在這種情況下,它將掃描uid=(.*),
這意味着:
在字符串“ uid =”和字符串“,”之間找到字符串
恰好是您要查找的名稱
注意:您當前的方法完全沒有“錯誤”。
您可以使用ast.literal_eval將字符串從元組轉換為dict: https ://docs.python.org/2/library/ast.html
ast.literal_eval('uid=alex,class=zenth')
{'uid': 'alex', 'class': 'zenth'}
然后您可以輕松訪問dict值
string_list = [i[0] for i in results]
uid_class_dict = [ast.literal_eval(string) for string in string_list]
uids = [uid_class.uid for uid_class in uid_class_dict ]
嘗試:
import re
results = [('uid=alex,class=zenth', {'age': ['12'], 'uidnumber': ['12AC']}), ('uid=beth,class=nenth', {'age': ['22'], 'uidnumber': ['13SD']})]
c = re.compile('uid=(?P<uid>.+?),')
uid_val_list = [c.search(result[0]).group('uid') for result in results]
print(uid_val_list)
您可以使用簡單且簡短的清單理解:
item.split(',')[0].split('=')[-1] for item in results
>>> [item[0].split(',')[0].split('=')[-1] for item in results]
['alex', 'beth']
>>>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.