首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“‘list”对象没有属性“find”

“‘list”对象没有属性“find”
EN

Stack Overflow用户
提问于 2014-04-22 00:24:27
回答 3查看 46.4K关注 0票数 6

我知道这是一个基本的问题,但我是python的新手,不知道如何解决它。

我有一个类似下一个示例的列表:

代码语言:javascript
复制
entities = ["#1= IFCORGANIZATION($,'Autodesk Revit 2014 (ENU)',$,$,$)";, "#5= IFCAPPLICATION(#1,'2014','Autodesk Revit 2014 (ENU)','Revit');"]

我的问题是如何将列表"entities"中的信息添加到以下格式的字典中:

代码语言:javascript
复制
dic = {'#1= IFCORGANIZATION' : ['$','Autodesk Revit 2014 (ENU)','$','$','$'], '#5= IFCAPPLICATION' : ['#1','2014','Autodesk Revit 2014 (ENU)','Revit']

我尝试使用"find"完成此操作,但得到以下错误:'list' object has no attribute 'find'

如果没有find方法,我不知道该怎么做。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-22 00:49:41

您可以使用str.split来处理字符串。首先使用'('拆分每个元素字符串,maxsplit为1:

代码语言:javascript
复制
In [48]: dic=dict(e[:-1].split('(', 1) for e in entities) #using [:-1] to filter out ')'
    ...: print dic
    ...: 
{'#5= IFCAPPLICATION': "#1,'2014','Autodesk Revit 2014 (ENU)','Revit')", '#1= IFCORGANIZATION': "$,'Autodesk Revit 2014 (ENU)',$,$,$)"}

然后用','拆分字典中的每个值

代码语言:javascript
复制
In [55]: dic={k: dic[k][:-1].split(',') for k in dic}
    ...: print dic
{'#5= IFCAPPLICATION': ['#1', "'2014'", "'Autodesk Revit 2014 (ENU)'", "'Revit'"], '#1= IFCORGANIZATION': ['$', "'Autodesk Revit 2014 (ENU)'", '$', '$', '$']}

请注意,字典中的键值对是无序的,正如您可能看到的那样,'#1= IFCORGANIZATION'一开始就没有显示。

票数 4
EN

Stack Overflow用户

发布于 2014-04-22 00:35:57

如果想知道某个值是否在列表中,可以使用in,如下所示:

代码语言:javascript
复制
>>> my_list = ["one", "two", "three"]
>>> "two" in my_list
True
>>> 

如果需要获取值在列表中的位置,则必须使用index

代码语言:javascript
复制
>>> my_list.index("two")
1
>>> 

请注意,列表的第一个元素的索引为0。

票数 10
EN

Stack Overflow用户

发布于 2014-04-22 00:47:24

这就是了:

代码语言:javascript
复制
>>> import re
>>> import ast
>>> entities = ["#1= IFCORGANIZATION('$','Autodesk Revit 2014 (ENU)','$','$','$');", "#5= IFCAPPLICATION('#1','2014','Autodesk Revit 2014 (ENU)','Revit');"]
>>> entities = [a.strip(';') for a in entities]
>>> pattern = re.compile(r'\((.*)\)')
>>> dic = {}
>>> for a in entities:
...     s = re.search(pattern, a)
...     dic[a[:a.index(s.group(0))]] = list(ast.literal_eval(s.group(0)))
>>> dic
{'#5= IFCAPPLICATION': ['#1', '2014', 'Autodesk Revit 2014 (ENU)', 'Revit'], '#1= IFCORGANIZATION': ['$', 'Autodesk Revit 2014 (ENU)', '$', '$', '$']}

这个正则表达式r'\((.*)\)'()中查找元素,并将它们转换为列表。它使子字符串出现在括号前作为键,列表作为值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23201351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档