Я читаю содержимое текстового файла JSON и пытаюсь получить содержимое определенного индекса в данных.
Ниже приведен пример объектов данных, которые я читаю. В моем файле есть несколько экземпляров, но все они выглядят примерно так:
[{ "value": "hello", "name": "janedoe", "istrue": "yes", "number": 5 }]
Консоль каждый раз ничего не возвращает, и я могу напечатать json_list[0], и она вернет все значение {'name': 'janedoe', 'number': 5}.
Я хотел бы использовать подстроку «лань» для поиска в списке и найти совпадение, а затем вернуть индекс этого совпадения.
Я пытался использовать функцию и один лайнер, такой как этот
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
Я хотел бы вернуть значение индекса, чтобы затем вызвать этот индекс и использовать его данные.
добавил в пост
json_list = [{'name': item['name'].split('.')[0], 'number': item['number']} for item in json_array] Я запутался, чего вы надеетесь добиться этой строкой. Что это за цикл делает внутри списка?
Этот цикл и строка находят значения «имя» и «число», которые мне нужно связать друг с другом. Затем он помещает эти значения в переменную json_list. В конце концов я сравню переменную с одной в списке и посмотрю, совпадает ли она, и если да, я вытащу числовое значение и использую его для следующей части моего скрипта.
Пожалуйста, используйте общий тег [python] для всех вопросов, связанных с python. используйте тег для конкретной версии по своему усмотрению.






Согласны ли мы с тем, что вы говорите о словарях внутри списка? Насколько я понимаю, вы хотите иметь доступ к индексу следующим образом:
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))
Я немного изменил, но функция возвращает индекс таблицы и ключ, содержащий «лань». Обратите внимание, что в коде вы просто возвращаете первый элемент, где вы найдете «лань», а не все элементы. Но нетрудно обобщить, если вы хотите получить весь результат.
Я так не думаю... Я хотел бы выполнить поиск в списке с помощью substring='doe' и вернуть индекс элемента, которому он соответствует.
Хорошо, а эту подстроку "doe" можно найти только в "value" и "name"?
Подстрока 'doe' будет появляться во всем списке только один раз и только рядом с 'name'.
Спасибо за решение, в итоге я просто использовал цикл for ниже!
Я бы просто пошел с простым циклом...
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
Или в действительно уродливом oneliner:
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])
Если бы я хотел игнорировать регистр в слове «лань», как бы я это сделал? Вместо жесткого кодирования «лань» я присвоил его переменной с именем sub
Не могли бы вы предоставить образец данных в
text.txt? Трудно определить, что не так, не видя, с чего вы начинаете.