Как перебрать этот вложенный словарь в списке, используя цикл for - PullRequest
0 голосов
/ 30 октября 2019

У меня есть список вложенных словарей, которые я хочу получить конкретные значения и поместить в словарь, как это:

vid = [{'a':{'display':'axe', 'desc':'red'}, 'b':{'confidence':'good'}},        
       {'a':{'display':'book', 'desc':'blue'}, 'b':{'confidence':'poor'}},  
       {'a':{'display':'apple', 'desc':'green'}, 'b':{'confidence':'good'}}
      ]

Я видел предыдущие вопросы, подобные этому, но я все еще не могу получитьзначения, такие как 'axe' и 'red'. Я хотел бы, чтобы новый dict имел 'Description', 'Confidence' и другие столбцы со значениями из вложенного dict.

Я пробовал это для цикла:

    new_dict = {}

    for x in range(len(vid)):
       for y in vid[x]['a']:
           desc = y['desc']
           new_dict['Description'] = desc

Iполучено много ошибок, но в основном эта ошибка: TypeError: string indices must be integers

Может кто-нибудь помочь решить, как получить значения из вложенного словаря?

Ответы [ 4 ]

0 голосов
/ 30 октября 2019

, так что вы захотите записать это в csv позже, чтобы pandas очень помогли вам в решении этой проблемы, используя pandas, вы можете получить описание как

import pandas as pd
new_dict = {}
df = pd.DataFrame(vid)
for index, row in df.iterrows() : 
     new_dict['description'] = row['a']['desc']


                                       a                       b
          0      {'display': 'axe', 'desc': 'red'}  {'confidence': 'good'}
          1    {'display': 'book', 'desc': 'blue'}  {'confidence': 'poor'}
          2  {'display': 'apple', 'desc': 'green'}  {'confidence': 'good'}

, вот так выглядит фрейм данных, как ab - столбецдатафреймы и ваши вложенные запросы - это строки фрейма данных

0 голосов
/ 30 октября 2019

Вам не нужно перебирать ключи в словаре (внутренний цикл for), просто получите нужное значение.

vid = [{'a':{'display':'axe', 'desc':'red'}, 'b':{'confidence':'good'} },
       {'a':{'display':'book', 'desc':'blue'}, 'b':{'confidence':'poor'}},  
       {'a':{'display':'apple', 'desc':'green'}, 'b':{'confidence':'good'}}
      ]

new_dict = {}

list_of_dicts = []

for x in range(len(vid)):
   desc = vid[x]['a']['desc']
   list_of_dicts.append({'desc': desc})
0 голосов
/ 30 октября 2019

Я нашел временное решение для этого. Вместо этого я решил использовать фрейм данных pandas.

df = pd.DataFrame(columns = ['Desc'])

for x in range(len(vid)):
    desc = vid[x]['a']['desc']
    df.loc[len(df)] = [desc]

0 голосов
/ 30 октября 2019

Попробуйте использовать этот список понимания:

d = [{'Description': i['a']['desc'], 'Confidence': i['b']['confidence']} for i in vid]
print(d)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...