Как получить значение индекса в списке из подстроки? - PullRequest
1 голос
/ 11 июля 2019

Я читаю содержимое текстового файла 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 ]

2 голосов
/ 11 июля 2019

Согласны ли вы, что вы говорите о словарях в списке? Если я понимаю, вы хотите иметь индекс для доступа, как это:

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"])

Вы можете использовать цикл, как вы, и получать поля, которые вы хотите. Это то, что вы хотите?

EDIT:

Это новый код для того, что вы хотите:

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 голос
/ 12 июля 2019

Я бы просто пошел с простой петлей ...

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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...