我有两个python词典:
ccyAr = {'AUDCAD','AUDCHF','AUDJPY','AUDNZD','AUDUSD','CADCHF','CADJPY','CHFJPY','EURAUD','EURCAD','EURCHF','EURGBP','EURJPY','EURNZD','EURUSD','GBPAUD','GBPCAD','GBPCHF','GBPJPY','GBPNZD','GBPUSD','NZDCAD','NZDCHF','NZDJPY','NZDUSD','USDCAD','USDCHF','USDJPY'}
data = {'BTrades', 'BPips', 'BProfit', 'STrades', 'SPips', 'SProfit', 'Trades', 'Pips', 'Profit', 'Won', 'WonPC', 'Lost', 'LostPC'}
我一直在努力探索如何最优雅地创建一个构造,其中'ccyAr'中的每个'数据'都存在。以下是我认为最接近的两个,但是第一个结果(现在我意识到)在数组中而后者我更像是伪代码:
1
table={ { data:[] for d in data } for ccy in ccyAr }
2
for ccy in ccyAr:
for d in data:
table['ccy']['d'] = 0
我还想将每个条目设置为int 0,我想一次性完成。我正在努力学习理解方法,因为我最终将每个内部目录成员的每个值创建为列表而不是值0。
我见过自动化片,但我不想模仿perl,我想用pythonic方式做。任何帮助=欢呼。
答案 0 :(得分:2)
for ccy in ccyAr:
for d in data:
table['ccy']['d'] = 0
很接近。
table = {}
for ccy in ccyAr:
table[ccy] = {}
for d in data:
table[ccy][d] = 0
此外,你问题中的ccyAr和数据是集合,而不是字典。
答案 1 :(得分:1)
您要搜索的是pandas DataFrame形状data
x ccyAr
。我在这里给出一个最小的例子:
import pandas as pd
data = {'1', '2'}
ccyAr = {'a','b','c'}
df = pd.DataFrame(np.zeros((len(data), len(ccyAr))))
然后最重要的一步是设置列和索引。如果您的两个所谓的词典实际上是设置的(如您的代码中所示),请使用:
df.columns = ccyAr
df.index = data
如果它们确实是字典,那么你必须调用它们的密钥方法:
df.columns = ccyAr.keys()
df.index = data.keys()
您可以print df
看到这实际上是您想要的:
| a | c | b
-------------
1 | 0 0 0
2 | 0 0 0
现在,如果您尝试通过df['a'][1]
进行访问,则会返回0.这是解决问题的最佳方法。
答案 2 :(得分:0)
如何使用词典理解来做到这一点:
table = {ccy:{d:0 for d in data} for ccy in ccyAr}