разбор вложенных элементов dict в формате json в python на основе типа элемента

#python #json #parsing #dictionary

#питон #json #синтаксический анализ #словарь

Вопрос:

Я хотел бы перечислить значение из ключа «name» только на основе значения «Username» из ключа «type» из локального файла json, хранящегося в переменной с именем result (используя json.load(input_file). Файл содержит другие словари, не связанные с именем пользователя, которые мне не нужны в моем результате.

    {
        "count": {
            "references": {
                "returned": 10,
                "total": 17933
            }
        },
        "entities": {
            "KF4UXbl": {
                "name": "johndoe123",
                "type": "Username",
            },
            "KeirTr": {
                "name": "#thash123",
                "hits": 141581,
                "type": "Hashtag",
            },
            "SQsD6o": {
                "name": "goodie1234",
                "type": "Username",
                "modified": "2019-04-12T21:02:51.938Z"
            },
            "type:Speech": {
                "name": "Other",
                "type": "MetaType",
            },
            "QXyWAK": {
                "name": "textuser1234",
                "type": "Username",
            },
            "type:Topic": {
                "name": "Topic",
                "type": "MetaType",
            },
            "KeTJkZ": {
                "name": "TestOrg",
                "type": "Organization",
                "meta_type": "type:Organization",
            },
}
 

Код

 for i, j in result.iteritems():
 if j.get('type') == 'Username':
  print j.get('name')
 

Однако я получаю эту ошибку:

     if j.get('type') == 'Username':
AttributeError: 'list' object has no attribute 'get'
 

Как я могу распечатать приведенное ниже на основе значения Username?

 johndoe123
goodie1234
textuser1234
 

Комментарии:

1. В чем ваш вопрос?

2. мой вопрос заключается в том, основываясь на приведенном выше json dict, как мне распечатать список имен из ключа ‘name’ на основе значения ‘Username’ из ключа ‘type’?

3. Если опубликованный вами словарь является именно тем, что result есть, то result это вложенный словарь. Ключами верхнего уровня являются "count" и "entities" , которые оба указывают на значения, являющиеся их собственными словарями. Попробуйте заменить result.iteritems() на result.get("entities").iteritems() в вашем for определении цикла. Это должно повторяться по той части структуры данных, которая вас интересует.