2017-01-10 45 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)