2017-01-10 119 views
-1

我有两个列表:比较两个列表项,其中列表包含字典项

a = [{'1':'value1'},{'2':'value2'}] 
b = [{'x':'value1'},{'y':'hello'},{'z':'value1'}] 

我想这两个列表,如果value1匹配,那么它将返回列表b的所有键之间的比较。我想这样的结果:

c= ['x','z'] 
+0

为每个值,或者对于所有的值? – wim

+0

您的物品结构很奇怪 - a'和'b'可以是多个项目的词典而不是单个项目词典的列表吗? – asongtoruin

回答

1

我读这是:“在名单b返回从字典d所有键k的列表,使得kd值相同的值从列表a

val_set = {v for d in a for v in d.values()} 
output = [k for d in b for k, v in d.items() if v in val_set] 
print(output) 
#['x', 'z'] 
+0

更好的实施! – MYGz

0

在一些字典中一些关键的您可以实现这样的事情:

a = [{'1':'value1'},{'2':'value2'}] 
b = [{'x':'value1'},{'y':'hello'},{'z':'value1'}] 
c = [w.keys()[0] for q in a for w in b if q.values()[0] == w.values()[0]] 
print(c) 

输出:

['x', 'z'] 

即相当于:

a = [{'1':'value1'},{'2':'value2'}] 
b = [{'x':'value1'},{'y':'hello'},{'z':'value1'}] 
c = [] 
for q in a: 
    for w in b: 
     if q.values()[0] == w.values()[0]: 
      c.append(w.keys()[0]) 
print(c)