如何从子字符串获取列表中的索引值?

时间:2019-07-11 18:49:29

标签: python list

我正在读取JSON文本文件的内容,并且正在努力获取数据中特定索引的内容。

下面是我正在读取的数据对象的示例。我的文件中有多个实例,但是它们看起来都类似于以下内容:

[{ "value": "hello", "name": "janedoe", "istrue": "yes", "number": 5 }]

控制台每次均不返回任何内容,我可以打印json_list[0],并且它返回整个值{'name': 'janedoe', 'number': 5}

我想使用子字符串“ doe”在列表中搜索并找到一个匹配项,然后返回该匹配项的索引。

我尝试使用一个函数和一个这样的衬里

res = [i for i in json_list if substring in i] 

    with open ('text.txt', 'r') as output_file:
        json_array = json.load(output_file)
        json_list = []
        json_list = [{'name': item['name'].split('.')[0], 'number': item['number']}
    for item in json_array]

    substring = 'doe'
    def index_containing_substring(json_list, substring):
        for i, s in enumerate(json_list):
            if substring in s:   
                return i
        return -1                                                 

我想返回索引值,以便随后可以调用该索引并利用其数据。

2 个答案:

答案 0 :(得分:2)

我们是否同意您谈论列表中的字典? 据我了解,您想像这样访问一个索引:

tab = [{ "value": "hello", "name": "janedoe", "istrue": "yes", "number": 5 }]
% Doesn't work
print(tab[0][0]) // You would like "hello"

但是,如果您知道只需要“值”,“名称”或任何其他内容,则可以这样访问:

tab = [{ "value": "hello", "name": "janedoe", "istrue": "yes", "number": 5 }]
# Display "hello"
print(tab[0]["value"])

您可以像使用循环那样获取所需的字段。 是你想要的吗?

编辑:

这是您想要的新代码:

def index_containing_substring(list_dic, substring):
    for i, s in enumerate(json_list):
        for key in s:
            if substring in s[key]:
                # If you don't want the value remove s[key]
                return i, key, s[key]
        return -1

json_list = [
    { "value": "hello", "name": "janedoe", "istrue": "yes", "number": 5 },
    { "value": "hello", "name": "pop", "istrue": "yes", "number": 5 }
]

substring = 'doe'

# display: (0, 'name', 'janedoe')
print(index_containing_substring(json_list, substring))

我做了一些修改,但是该函数返回表的索引,并且哪个键包含'doe'。 注意,在代码中,您只是返回找到“ doe”的第一个元素,而不是所有元素。 但是,如果要获得所有结果,则不难一概而论。

答案 1 :(得分:1)

我只会进行一个简单的循环...

def find_doe_in_list_of_dicts(list_of_dicts):
    for item in list_of_dicts:
        if "doe" in item["name"]:
            index_of_item_with_doe = list_of_dicts.index(item)
            break

    return index_of_item_with_joe

或者真的很难看:

 def find_doe_in_list_of_dicts(list_of_dicts):
     return list_of_dicts.index([item for item in list_of_dicts if "name" in item and "doe" in item["name"]][0])