簡體   English   中英

Python:數組元組提取

[英]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)
  1. 在搜索可能加快之前進行編譯。
  2. 除了列表理解之外,您還可以根據需要使用map()。

您可以使用簡單且簡短的清單理解:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM