#python
#python
Вопрос:
У меня есть эти данные:
{'6': {'Change': '109,438',
'Name': 'Prologis Inc',
'Owned': '609,826',
'Weight': ' 2.14'},
'7': {'Change': '48,032',
'Name': 'The Home Depot Inc',
'Owned': '208,967',
'Weight': ' 2.02'},
'8': {'Change': '61,235',
'Name': 'Facebook Inc A',
'Owned': '220,558',
'Weight': ' 2.01'},
'9': {'Change': '32,045',
'Name': 'NextEra Energy Inc',
'Owned': '205,412',
'Weight': ' 1.98'}}
это dict внутри dict, и я хочу извлечь «Имя» и «Вес». Я изо всех сил пытаюсь пройти первый слой (тот, который с числами), поэтому этот код не работает:
mylist = []
stocks = holdings[0]
for s in stocks:
m = (s['Name'], s['Weight'])
mylist.append(m)
Комментарии:
1. Это зависит от того, чего вы хотите достичь, но я бы загрузил данные в фрейм данных pandas для упрощения анализа и построения графиков.
df = pd.DataFrame.from_dict(stocks, orient='index')
.
Ответ №1:
Вы хотите выполнить итерацию stocks.values()
, чтобы получить значения, а не ключи:
>>> [(s['Name'], s['Weight']) for s in stocks.values()]
[('Prologis Inc', ' 2.14'), ('The Home Depot Inc', ' 2.02'), ('Facebook Inc A', ' 2.01'), ('NextEra Energy Inc', ' 1.98')]
Ответ №2:
Это потому, что вы перебираете ключи словаря (в данном случае числа). Для перебора пар ключ-значение вы должны использовать stocks.items():
for i, stock in stocks.items():
m = (stock['Name'], stock['Weight'])
Ответ №3:
В заданных данных weight
они представлены в строковом формате. Я думаю, вам нужно проанализировать вес в float.
import json
data = {'6': {'Change': '109,438',
'Name': 'Prologis Inc',
'Owned': '609,826',
'Weight': ' 2.14'},
'7': {'Change': '48,032',
'Name': 'The Home Depot Inc',
'Owned': '208,967',
'Weight': ' 2.02'},
'8': {'Change': '61,235',
'Name': 'Facebook Inc A',
'Owned': '220,558',
'Weight': ' 2.01'},
'9': {'Change': '32,045',
'Name': 'NextEra Energy Inc',
'Owned': '205,412',
'Weight': ' 1.98'}}
pairs = []
for stock in data.values():
pairs.append((stock['Name'], float(stock['Weight'].strip())))
print(json.dumps(pairs, indent=4))
Вывод:
[
[
"Prologis Inc",
2.14
],
[
"The Home Depot Inc",
2.02
],
[
"Facebook Inc A",
2.01
],
[
"NextEra Energy Inc",
1.98
]
]