如何通过Python中的属性值,获取数组列表中的对象

2024-09-25 00:35:16 发布

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

我试图编写一个Sublime Text 2插件,并在.subilme-settings文件中获取一些值。在

{
"files":
    [
        {
            "name" : "Markdown",
            "extension" : ".md"
        },{
            "name" : "Python",
            "extension" : ".py"
        },{
            "name" : "Sublime Text Setting",
            "extension" : ".sublime-settings"
        }
    ]
}

这是我第一次使用Python,我不知道该怎么做,是否存在类似于:

^{pr2}$

Tags: 文件textnamepy插件settingsextensionfiles
3条回答

您可以编写自己的函数来获取索引:

>>> 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

这可能不是最好的解决方案,但您可以尝试一下:

i=0
for element in files:
    if '.py' in element:
        break
    else:
        i+=1

在这个循环的末尾,如果它找到了您想要的扩展名,'i'将是您要查找的索引。但是,如果需要每个元素的扩展名列表:

^{pr2}$

Python列表有一个index方法。但它只查找与参数相等的值,而不查找参数与分部值匹配的值。在

在Python中,确实没有任何东西可以找到这样的部分结构匹配;您可以在等式或谓词函数上搜索/filter/etc,但其他任何内容都必须自己编写。在

最简单的方法是使用循环。可以显式编写:

for index, element in enumerate(my_array):
    if element["extension"] == ".py":
        return index

…或者在理解中:

^{pr2}$

{2}作为一个更高的函数,{cd2>在这里似乎没有更大的优势。在

当然,如果您愿意,您可以编写自己的indexOf类函数来匹配部分结构。在

相关问题 更多 >