поиск внутри словаря списков - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь искать внутри словаря списков элементы списка являются словарями

например, поиск слова в статьях NY Times или поста или если слово в обеих газетных статьях

также, как я могу добавить элементы в определенный словарь (новостную газету)


news_papers ={
    "NY Times": [
        {"id": 1, "language": "English", "edition": "first", "author": "MR Mike",
         "article": "New york post example"}
    ],

    "the POST": [
        {"id": 1, "language": "English", "edition": "first", "author": "kyle",
         "article": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, ...etc"},

        {"id": 2, "language": "English", "edition": "first", "author": "MR Jake",
         "article": "writing for New york"}
    ]

}

Ожидаемые результаты:

если я найду слово "Нью-Йорк"

результат:

1-ный раз, идентификатор статьи: 1

2-пост, id статьи: 2

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Вам нужно перебирать каждый список и использовать ключи словаря, чтобы получить то, что вы хотите. Вы также должны быть осторожны с чувствительностью к регистру:

compamy_article_id = []
for company, paper in news_papers.items():
    for article in paper:
        if search_str.lower() in article['article'].lower():
            compamy_article_id.append((company, article['id']))

или однострочник:

search_str = 'New York'
compamy_article_id = [(company, article['id']) for company, paper in news_papers.items() for article in paper if search_str.lower() in article['article'].lower()]

Затем распечатайте это:

for company, art_id in compamy_article_id:
    print(f"{index + 1}-{company}, artical id: {art_id}")

Выход:

1-NY Times, artical id: 1
2-the POST, artical id: 2
0 голосов
/ 07 июня 2019

с троичным оператором:

for key, value in news_papers.items():
    print(f'{ (key, value[0].get("id")) if "new york" in value[0].get("article").lower() else "" }')

Другие ответы более уместны, это всего лишь вариант боковой панели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...