使用for循环创建多级字典时出现问题



这是我的代码:

dDict = {'Managers':colnames}

for elements in range(len(colnames)):
dDict.update({'Managers' : {str(colnames[elements]): {str([[item for item in row] for row in sarr[elements]]) : {str([[num for num in r] for r in varr[elements]])}}}})
print(dDict)   

colnames是一个包含71个资产管理器名称的列表。sarr是符号列表,varr是与每个符号相关联的值列表。符号列表是一个列表列表,其中每个列表都包含与资产管理器关联的符号列表。我正在尝试创建一个多层次的字典,以适当的顺序排列所有这些。

这是我的输出:

{'Managers': {"['Yacktman Asset Management']": {"[['P', 'E', 'P'], ['S', 'Y', 'Y'], ['P', 'G'], ['D', 'I', 'S'], ['M', 'S', 'F', 'T'], ['G', 'O', 'O', 'G'], ['N', 'W', 'S', 'A'], ['B', 'K', 'N', 'G'], ['C', 'T', 'S', 'H'], ['K', 'O']]": {"[['5', '.', '9', '5', '%'], ['5', '.', '4', '4', '%'], ['5', '.', '4', '1', '%'], ['5', '.', '2', '8', '%'], ['5', '.', '0', '7', '%'], ['5', '.', '0', '3', '%'], ['4', '.', '7', '6', '%'], ['4', '.', '5', '1', '%'], ['4', '.', '4', '2', '%'], ['4', '.', '3', '4', '%']]"}}}}

正如你所看到的,只有我的最后一个colname元素正在打印,所以更新是一个错误,每个列表的元素都被奇怪地访问("[['p','E','p']"(,并且它们不是键/值配对的。

如何返回输出:

{'Managers': {"Yacktman Asset Management": 
{"PEP : 5.95%", 
"SYY : 5.44%", etc.}}
{"AKO Capital":
{"LIN : 12.44%",
"BKNG : 7.88%", etc.}} } 

如果可能的话,以下会更好-

{'Managers': {"Yacktman Asset Management": 
{"PEP" : {"5.95%", "additional value"}, 
"SYY" : {"5.44%", "add val"}, etc.}}
{"AKO Capital":
{"LIN" : {"12.44%", "add val"}
"BKNG" : {"7.88%", "add val"}, etc.}} } 

我希望这个问题不是太基本/初级的——我已经在这个问题上绞尽脑汁了一段时间,如果我能得到一些帮助,我会非常感激,因为我确信这更像是一个语义问题。关于我最终目标的一些额外信息,我正试图从这本字典中创建一个多索引Pandas DataFrame。考虑到这三个列表,如果有更好/更容易的方法,请告诉我。

你的答案很好,但当涉及到这样的事情时,我喜欢让pandas尽可能多地承担重任。例如,以下内容也应该很好地工作。

df_combined = pd.DataFrame()
for i,name in enumerate(colnames):
df = pd.DataFrame()
df['Tickers'] = sarr[i]
df['Values'] = varr[i]
df['Fund Names'] = name*len(sarr[i])
df_combined = pd.concat([df_combined,df])
df_combined = df_combined.groupby(['Fund Names','Tickers']).first()
df_combined
varr = np.array(vals, dtype='object')
sarr = np.array(symbol, dtype='object')
zarr = []
bigDic = {}
for x in range(len(varr)):
zarr.append(list(zip(sarr[x],varr[x])))
def convert(a):
it = iter(a)
res_dct = dict(it)
return res_dct
for x in range(len(zarr)):
bigDic[(colnames[x][0])] = convert(zarr[x])
dfB = pd.DataFrame.from_dict(bigDic, orient="index").stack()
display(dfB)

如果有人有更好的解决方案来从这些数据构建多索引的话,下面是我正在处理的一些数据样本。print(sarr, varr, colnames)的输出

列表数组sarr(股票代码(:

[array(['LIN', 'BKNG', 'EBAY', 'V', 'EL', 'GOOG', 'NKE', 'RACE', 'OTIS',
'PG'], dtype=object)
array(['GRA', 'WRK', 'RL', 'UNVR', 'EPC', 'OI', 'LEA', 'AVT', 'EMN',
'NOMD'], dtype=object)
array(['BRK.B', 'WM', 'CAT', 'CNI', 'WMT', 'ECL', 'CCI', 'FDX', 'UPS',
'SDGR'], dtype=object)
array(['LOW', 'CMG', 'QSR', 'HLT', 'A', 'SBUX', 'HHC'], dtype=object)
array(['FTCH', 'DXC', 'AMZN', 'DM', 'SFIX', 'OMF', 'ADT', 'FB', 'BABA',
'VRM'], dtype=object)
array(['CBRE', 'GOOGL', 'ALLY', 'CHTR', 'C', 'FB', 'BAC', 'STZ', 'COF',
'NFLX'], dtype=object)
array(['JOE', 'BAC', 'BRK.B', 'CNQ', 'T', 'KMI', 'CINF', 'ENB', 'WES',
'CVS'], dtype=object)
array(['IEP', 'OXY', 'CVI', 'HLF', 'LNG', 'NWL', 'NAV', 'CLDR', 'XRX',
'HRI'], dtype=object)
array(['MSGE', 'VIAC', 'GS', 'LAZ', 'ORCL', 'SNA', 'NLSN', 'MOS', 'ZBH',
'WU'], dtype=object)
array(['NEM', 'BRK.B', 'LKQ', 'BRK.A', 'WU', 'WFC', 'ATGE', 'GOLD', 'CDK',
'SINA'], dtype=object)]

与tickers相关联的值数组,varr:

[array(['12.44%', '7.88%', '7.12%', '6.59%', '5.40%', '4.84%', '4.63%',
'4.32%', '4.06%', '3.96%'], dtype=object)
array(['18.95%', '14.69%', '11.70%', '11.51%', '10.72%', '10.63%',
'9.29%', '8.01%', '3.35%', '1.15%'], dtype=object)
array(['43.71%', '9.84%', '9.18%', '8.35%', '7.49%', '4.23%', '3.80%',
'3.52%', '3.41%', '2.47%'], dtype=object)
array(['19.88%', '16.10%', '15.30%', '14.85%', '14.49%', '10.77%',
'8.62%'], dtype=object)
array(['5.16%', '4.62%', '4.29%', '4.21%', '4.17%', '3.90%', '3.30%',
'3.24%', '3.07%', '2.87%'], dtype=object)
array(['10.68%', '10.53%', '6.50%', '6.49%', '6.00%', '5.23%', '5.05%',
'5.02%', '4.92%', '4.77%'], dtype=object)
array(['90.79%', '1.19%', '1.12%', '0.93%', '0.90%', '0.70%', '0.68%',
'0.67%', '0.62%', '0.61%'], dtype=object)
array(['56.01%', '7.65%', '5.29%', '4.91%', '4.84%', '4.63%', '3.67%',
'3.63%', '3.33%', '1.49%'], dtype=object)
array(['6.38%', '5.79%', '5.47%', '5.40%', '5.20%', '5.18%', '4.92%',
'4.47%', '4.24%', '4.19%'], dtype=object)
array(['16.47%', '13.41%', '11.57%', '9.90%', '8.56%', '7.17%', '6.14%',
'3.69%', '3.55%', '3.55%'], dtype=object)]

最后,基金名称列表,也称为colnames:

[['AKO Capital'], ['Alex Roepers - Atlantic Investment Management'], ['Bill & Melinda Gates Foundation Trust'], ['Bill Ackman - Pershing Square Capital Management'], ['Bill Miller - Miller Value Partners'], ['Bill Nygren - Oakmark Select Fund'], ['Bruce Berkowitz - Fairholme Capital'], ['Carl Icahn - Icahn Capital Management'], ['Charles Bobrinskoy - Ariel Focus'], ['Charles de Vaulx - International Value Advisers']]

最新更新