创建并实例化python 2d字典

时间:2015-07-22 22:52:21

标签: python dictionary

我有两个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方式做。任何帮助=欢呼。

3 个答案:

答案 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}