我正在尝试编写Sublime Text 2
插件并在.subilme-settings
文件中获取一些值。
{
"files":
[
{
"name" : "Markdown",
"extension" : ".md"
},{
"name" : "Python",
"extension" : ".py"
},{
"name" : "Sublime Text Setting",
"extension" : ".sublime-settings"
}
]
}
这是我第一次使用 Python ,我不知道该怎么做,确实存在类似:
my_array.indexOf({"extension":".py"})
答案 0 :(得分:2)
Python列表 do 具有index
方法。但它只找到等于参数的值,而不是具有与您的部分值匹配的参数的值。
在Python中找不到像这样的部分结构匹配;你可以搜索/过滤/等。关于平等,或谓词功能,但你必须自己写的其他任何东西。
最简单的方法是使用循环。你可以明确地写出来:
for index, element in enumerate(my_array):
if element["extension"] == ".py":
return index
......或者理解:
return next(index for index, element in enumerate(array)
if element["extension"] == ".py")
或者,您可以将匹配转换为函数,并将其传递给filter
,或在更复杂的高阶函数中将其用作key
函数,但似乎没有在这里要有任何真正的优势。
当然,如果需要,您可以编写自己的indexOf
- 类似于部分结构的函数。
答案 1 :(得分:1)
您可以编写自己的函数来获取索引:
>>> my_dict = {'files': [{'name': 'Markdown', 'extension': '.md'}, {'name': 'Python', 'extension': '.py'}, {'name': 'Sublime Text Setting', 'extension': '.sublime-settings'}]}
>>> def solve(key, val, lis):
return next((i for i, d in enumerate(lis) if d[key] == val), None)
...
>>> solve('extension', '.py', my_dict['files'])
1
答案 2 :(得分:0)
这可能不是最好的解决方案,但你可以试试这个:
i=0
for element in files:
if '.py' in element:
break
else:
i+=1
在这个循环结束时,如果找到你想要的扩展名,'i'将成为你正在寻找的索引。但是,如果您想要一个带有扩展名的每个元素的列表:
myElements=[]
for element in files:
if '.py' in element:
myElements.append(element)