2016-10-10 3 views
1
a = [{'a':{'a':1}}, {'b':{'b':1}}, {'c':{}}] 
b = [{'a':{'a':1,'b':0}}, {'b':{'a':1}}] 

여기에는 두 개의 목록이 있습니다. 그것은 또한 작동두 개의 사전 목록을 비교하고 파이썬의 모든 키와 값으로 새 목록을 만듭니다.

newlist = [{'a':{'a':1,'b':0}}, {'b':{'a':1,'b':1}}, {'c':{'a':0,'b':0}}] 
+0

당신은이 기능에서 필요한 기능에 대한보다 구체적인 될 필요가 대답합니다. 또한 지금까지 시도한 것에 대한 특정 코드를 게시하십시오. – Brian

+0

누락 된 키와 값을 찾는 사전의 전체 목록을 생성하려고합니다. 나는이 같은 a = [{ 'a': {}}, { 'b': {}}, { 'c': {}}]와 같은 dict의 초기화 된 빈 목록을 가지고 있고 b = [{ 'a': { 'a': 1, 'b': 0} 이제 {{a ': 1}}, {'b ': 1} }}, { 'b': { 'a': 0, 'b': 1}}] –

+0

당신이 뭘 원하는거야? 'A = [{ 'a': {}}, { 'b': {}}, { 'c': {}}]; B = {{a ': {'A ': 1}}, {'b ': {'B ': 1}}' 1, 'B': 0}}, { 'b': { 'A': 0, 'B': 1}}, { 'c': { 'A': 0, 'B' ]' – fabianegli

답변

0
A_list = [{'a':{'A':1}}, {'b':{}}] 
B_list = [{'b': {'B': 1}}, {'a': {'A': 0}}] 
list_with_all_keys = [{'a':{}}, {'b':{}}, {'c':{}}] 
new_lod = [{k:{'A':(1 if k in A_list and 'A' in A_list[k] and A_list[k]['A'] is 1 else 0), 
       'B':(1 if k in B_list and 'B' in B_list[k] and B_list[k]['B'] is 1 else 0)}} 
      for k in [list(n.keys())[0] for n in list_with_all_keys]] 

new_lod 나는 일이 뭐죠 명확히하기 위해, 일부 대문자를 추가 한, [{'a': {'B': 0, 'A': 0}}, {'b': {'B': 0, 'A': 0}}, {'c': {'B': 0, 'A': 0}}]

주 다음이다 : 나는이를 비교하고이 같은 새 목록을 생성 할 A/A_listB/B_list 대신 소문자 문자 ab 만 사용하는 경우

(!) 참고

난 당신이 목록에서 사전의 첫 번째 레벨에서 중복 키를하지 않는 가정합니다. 필자는 이것이 올바른 가정이라고 생각합니다. 필요한 출력이 첫 번째 수준 사전에서이 중복 키를 접을 것이기 때문입니다. 따라서 목록을 건너 뛰고 사전 목록 대신 하나의 사전을 사용할 수 있습니다. 이것은 표현식을 약간 단순화합니다. 그러나 응용 프로그램에 따라 두 목록, 사전 또는 세트를 비교하거나 결합하는 방법이 더 쉬울 수도 있습니다.

A_dict = {'a':{'A':1}, 'b':{}} 
B_dict = {'b': {'B': 1}, 'a': {'A': 0}} 
dict_with_all_keys = {'a':{}, 'b':{}, 'c':{}} 
# a dictionary solution with no list 
new_dict = {k:{'A':(1 if k in A_dict and 'A' in A_dict[k] and A_dict[k]['A'] is 1 else 0), 
       'B':(1 if k in B_dict and 'B' in B_dict[k] and B_dict[k]['B'] is 1 else 0)} 
      for k in dict_with_all_keys} 
0

a = [{'a':{'a':1}}, {'b':{'b':1}}, {'c':{}}] 
b = [{'a':{'a':1,'b':0}}, {'b':{'a':1}}] 

result = {} 

for c in a + b: 
    for key,value in c.items(): 
     result[key] = dict() 
     result[key]['a'] = value.get('a', 0) 
     result[key]['b'] = value.get('b', 0) 

print(result) 

당신에게 줄 것이다 될 일을 더 읽을 수있는 방법은
{'c': {'a': 0, 'b': 0}, 'a': {'a': 1, 'b': 0}, 'b': {'a': 1, 'b': 0}}

+0

솔루션에 교육적 가치가 있지만 OP에서 요구하는 형식을 무시합니다. – fabianegli

관련 문제