2016-08-10 36 views
0

我有保存记录的集合,如果一些词典:匹配值

d1 = {'id':['223','444'],'value_1':['v1','x1']} 
d2 = {'id': ['223','666'],'value_2':['v2','x2']} 
d3 = {'id':['223','444'], 'value_3':['v3','x3']} 

我要搜索所有符合第一库的ID,并将其保存在一个新的与记录所有的领域,“_1”,“_2”和“VALUE_3”:

d_4 = {'id':[],'value_1':[],'value_2':[],'value_3':[]} 

如果一条记录没有在所有的词典,我将在这一领域增加“----”存在。所以输出,在这种情况下,将是:

d_4 

{'id': ['223', '444'], 
'value_1': ['v1', 'x1'], 
'value_2': ['v2', '----'], 
'value_3': ['x3', 'x3']} 

我写了这个代码,可以这样做:

for i,id_d1 in enumerate(d1['id']): 
    d_4['id'].append(id_d1) 
    d_4['value_1'].append(d1['value_1'][i]) 
    if id_d1 in d2['id']: 
     for j,id_d2 in enumerate(d2['id']): 
      if id_d1==id_d2: 
       d_4['value_2'].append(d2['value_2'][j]) 
    else: 
     d_4['value_2'].append('----') 
    if id_d1 in d3['id']: 

     for k,id_d3 in enumerate(d3['id']): 
      if id_d1==id_d3: 
       d_4['value_3'].append(d3['value_3'][j]) 
    else: 
     d_4['value_3'].append('----') 

但并不似乎是一个不错的办法。

+1

我明白你的这个权利吗r记录有一个'id'成员,它实际上是一个**的**列表,而一个'value_x'成员实际上是一个值列表,每个值都对应一个id,依次为?也就是说,'d1 ['value_1'] [0]'是与'd1 ['id'] [0]'对应的值? –

+0

这是不明确是否'd1' ids是参考,因为你说“如果其中一个记录*不存在于所有字典*我将在该字段中添加'----'。这是否意味着用'd3 = {'id':['223','555'],'value_3':['v3','x3']}'你会有'----''在'd_4'中代表'value_3'和'value_1',然后呢? – zezollo

+0

@MathieuBridon是的,这是正确的 –

回答

1

也许这将帮助你:

代码:

import sys 
print(sys.version) 

# you should use an iterable for your data 
in_list = [{'id':['223','444'],'value_1':['v1','x1']}, 
    {'id': ['223','666'],'value_2':['v2','x2']}, 
    {'id':['223','444'], 'value_3':['v3','x3']} 
    ] 

print "Input:\n", in_list 

# note that dictionaries are not ordered 
out_dict = {} 
out_dict["id"] = in_list[0]["id"] 
out_dict["value_1"] = in_list[0]["value_1"] 

for i,d in enumerate(in_list[1:]): 
    values = [v[1] for v in d.items() if "value" in v[0]][0] 
    #print(i, d, values) 
    if in_list[i+1]["id"] != in_list[0]["id"]: 
     values[1] = "---" 
    out_dict["value_{}".format(i+2)] = values 

print "Output:\n", out_dict 

日期:

2.7.2 (default, Aug 31 2011, 14:05:14) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build)] 
Input: 
[{'value_1': ['v1', 'x1'], 'id': ['223', '444']}, {'id': ['223', '666'], 'value_2': ['v2', 'x2']}, {'id': ['223', '444'], 'value_3': ['v3', 'x3']}] 
Output: 
{'value_1': ['v1', 'x1'], 'id': ['223', '444'], 'value_3': ['v3', 'x3'], 'value_2': ['v2', '---']} 


更新:修复错误,以得到所需的输出 UPDATE2:我+ 1偏移

+0

如果您确实需要迭代变量:>>> d1 = {“key”:None} >>> i = 1 >>> print(locals( )[“d”+ str(i)] [“key”]) None' – handle