a = [{'a':{'a':1}}, {'b':{'b':1}}, {'c':{}}]
b = [{'a':{'a':1,'b':0}}, {'b':{'a':1}}]
这里有两个dict列表。我想比较这些并生成一个这样的新列表:
newlist = [{'a':{'a':1,'b':0}}, {'b':{'a':1,'b':1}}, {'c':{'a':0,'b':0}}]
答案 0 :(得分: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
和b
而不是A
/ {{分别为1}}和A_list
/ B
。
<强>旁注强>
我假设您没有在列表的第一级词典中获得重复键。我认为这是一个正确的假设,因为所需的输出会折叠第一级词典中的这些重复键。因此,您可以跳过列表并使用一个字典而不是字典列表。这略微简化了表达式。但是根据您的应用程序,可能会有更好的(说起来更简单)方法来比较或/和组合两个列表,词典或集合。
B_list
答案 1 :(得分: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}}