2017-07-08 129 views
3

我有2個表,A和B.嵌套列表理解

  • A是包含值的列表詞典列表。
  • B是一個簡單的列表。

要求是列表B的元素添加到A.

下面是代碼的字典中的值,

a = [{'a':[1,5]}, {'b' : [6,10]}, {'c' : [11,15]}] 
b = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] 

for i in a: 
    for k,j in i.items(): 
     for m,n in enumerate(b): 
      if j[0]<= n<=j[1]: 
       j.append(n) 

print(a) 

[{'a':[1,5,1,2,3,4,5]}, {'b' : [6,10,6,7,8,9,10]}, {'c' : 
[11,15,11,12,13,14,15]}] 

# tried list comprehension 
a= [{k:n} for i in a for k,j in i.items() for m,n in enumerate(b) 
if j[0]<= n<=j[1]] 

print(a) 

[{'a': 1}, {'a': 2}, {'a': 3}, {'a': 4}, {'a': 5}, {'b': 6}, {'b': 7}, 
{'b': 8}, {'b': 9}, {'b': 10}, {'c': 11}, {'c': 12}, {'c': 13}, {'c': 
14}, {'c': 15}] 

問題是,這是否可以使用列表理解來完成?我嘗試過但無法生成所需的輸出。

回答

3
a = [{k: [ x for x in b if v[0] <= x <= v[1] ]} for d in a for k,v in d.items()] 
+0

解決方案按預期工作 – Ganesh

2

只需對@Błotosmętek答案進行小修改即可獲得您需要的輸出結果。

a = [{'a': [1, 5]}, {'b': [6, 10]}, {'c': [11, 15]}] 
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 

a = [{k: v+[x for x in b if v[0]<=x<=v[1]]} for d in a for k, v in d.items()] 
print(a) 

輸出

[{'a': [1, 5, 1, 2, 3, 4, 5]}, {'b': [6, 10, 6, 7, 8, 9, 10]}, {'c': [11, 15, 11, 12, 13, 14, 15]}] 
+0

感謝修改的方案 – Ganesh

+0

從描述中不明顯,但如果我們把OP的解決方案作爲參考,然後是的,你的修改是必要。 –