Python:数组元组提取

2024-09-29 01:22:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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)

有没有更好的办法?你知道吗


Tags: ageuidval数组resultslistclasssplit
3条回答

您可以使用“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=”和字符串“,”之间找到字符串

正好是你要找的名字

注意:你现在的方法没有什么“错误”。你知道吗

你可以用评估要将元组中的字符串转换为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()。你知道吗

相关问题 更多 >